1

一列中有 50 多个不同的级别,每个级别都需要分解成自己的数据框并写入文件(excel 或 csv)。

我认为这是一个可能的解决方案:

df1, df2, df3, df4 = [x for _, x in df.groupby(df['column_of_interest'])]

但是有没有办法不对数据帧的数量进行硬编码?

4

3 回答 3

2

有没有办法不对数据帧的数量进行硬编码?

就在这里。使用字典或列表。使用dict

dfs = {i: x for i, (_, x) in enumerate(df.groupby('column_of_interest'), 1)}

然后通过 , 等访问您的数据dfs[1]dfs[2]

或者,使用list

dfs = [x for _, x in df.groupby('column_of_interest')]

然后使用dfs[0],dfs[1]等。

如果您不需要存储数据框切片,只需迭代一个groupby对象并使用to_csv. 这对于 f 字符串(PEP 498,Python 3.6+)很方便:

for idx, (value, x) in enumerate(df.groupby('column_of_interest'), 1):
    x.to_csv(f'slice_{value}.csv')  # include value in filename
    x.to_csv(f'slice_{idx}.csv')    # include numeric index in filename
于 2019-01-09T00:32:44.933 回答
0

您可以直接保存数据框

[df1.to_csv("coi_%s.csv"%val) for val, df1 in df.groupby(df['column_of_interest'])]

或使用显式 for 循环

for val, df1 in df.groupby(df['column_of_interest']):
    #Write the df1 to csv or excel
    df1.to_csv("coi_%s.csv"%val)
于 2019-01-09T00:41:53.930 回答
0

一种方法可以使用locals但不推荐,个人认为 jpp 的答案是这种类型的正确方法 request 。

variables = locals()
for key,value in df.groupby(df['column_of_interest']):
    variables["df{0}".format(key)]= value
于 2019-01-09T00:50:03.367 回答