一列中有 50 多个不同的级别,每个级别都需要分解成自己的数据框并写入文件(excel 或 csv)。
我认为这是一个可能的解决方案:
df1, df2, df3, df4 = [x for _, x in df.groupby(df['column_of_interest'])]
但是有没有办法不对数据帧的数量进行硬编码?
一列中有 50 多个不同的级别,每个级别都需要分解成自己的数据框并写入文件(excel 或 csv)。
我认为这是一个可能的解决方案:
df1, df2, df3, df4 = [x for _, x in df.groupby(df['column_of_interest'])]
但是有没有办法不对数据帧的数量进行硬编码?
有没有办法不对数据帧的数量进行硬编码?
就在这里。使用字典或列表。使用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
您可以直接保存数据框
[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)
一种方法可以使用locals
但不推荐,个人认为 jpp 的答案是这种类型的正确方法 request 。
variables = locals()
for key,value in df.groupby(df['column_of_interest']):
variables["df{0}".format(key)]= value