Pandas:按日期将大文件拆分为单独的文件,保留原始顺序。

Jas*_*per 5 python pandas pandas-groupby

我有一个非常大的数据框,带有日期 Index ,涵盖了多年的时间段。每一天都包含多个值。

      Date (DT_index)   Description   Value1
  1      2015-01-12     stringvalue    10
  2      2015-01-12     stringvalue    12
  3      2015-01-12     stringvalue    14
  4      2015-02-12     stringvalue    16
  5      2015-02-12     stringvalue   348
  6      2015-09-12     stringvalue     1
  7      2015-09-12     stringvalue     9
                  (.....)
8456     2017-11-03     stringvalue    10
8457     2017-11-03     stringvalue   111
8458     2017-11-04     stringvalue    29
Run Code Online (Sandbox Code Playgroud)

我想要的是根据月/年将此 csv 拆分为单独的文件。(因此文件如下:12-2015.csv、01-2016.csv、02-2016.csv)

我已将大型 csv 加载到 pandas df 中,并按月对其进行分组,如下所示

dfgp = df.groupby(pd.TimeGrouper(freq='M'))
Run Code Online (Sandbox Code Playgroud)

但我唯一可用的操作似乎是“总和”或“平均”之类的东西。我不希望这样做,我想按月对大型 DF 进行切片,而不是执行更改或聚合数据的 .apply 操作。

我也尝试过这段代码:

dfgp = [group[1] for group in df.groupby(df.index.date)]

for x in result:
    name = str(x.index.date.month.year)
    x.to_csv(name, sep=';')
Run Code Online (Sandbox Code Playgroud)

这个方法非常接近。我有两个问题。1.我的命名方法不起作用:

'numpy.ndarray' object has no attribute 'month'
Run Code Online (Sandbox Code Playgroud)
  1. 当我删除名称方法时,它会迭代文件。但这些组是按天分组的(例如:2015-12-13,有 6 个条目,而不是 2015-12-alldays,有 238 个条目)

我用这段代码纠正最后一个问题:

result = [group[1] for group in df.groupby(df.index.date.month)]
Run Code Online (Sandbox Code Playgroud)

但这只是引发了与之前相同的错误:

'numpy.ndarray' object has no attribute 'month'
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?

Sco*_*ton 2

咱们试试吧:

for n,g in df.groupby(pd.Grouper(freq='M')):
    name = n.strftime('%Y%m') + '.csv'
    g.to_csv(name, sep=';')
Run Code Online (Sandbox Code Playgroud)