【问题标题】:Split up a csv file / pandas dataframe into many files based on grouping in another column根据另一列中的分组将 csv 文件/pandas 数据框拆分为多个文件
【发布时间】:2021-03-31 21:11:23
【问题描述】:

我在一个名为 list.csv 的 csv 文件中有以下数据集,它是 2 列和 68 行,

name   group
295h1  groupA
20jca  groupA
....
2919d  groupG
....
2xx9a  groupM

每组有 3-5 个名字。

我想把名字分成他们的组,然后像这样将文件保存到 csv 文件中。

group-1.csv

295h1
20jca
..

group-13.csv

...
2xx9a

到目前为止,我有以下代码,

import pandas as pd

counter = 1
tlist = []
for idx,row in df.iterrows():
    previousGroup = None
    if row['group'] == previousGroup:
        tlist.append(row['name'])
        previousGroup = row['group']
    else:
        with open(f'group-{counter}'), 'w',) as myfile:
             wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
             wr.writerow(tlist)
        counter += 1
        tlist = []

但它会创建 68 个空文件,这是 csv 文件的长度。

如何根据我的要求正确拆分此文件?

【问题讨论】:

    标签: python pandas list dataframe csv


    【解决方案1】:

    如果需要,组名称groupA 使用以1 开头的数字:

    for i, (_, group) in enumerate(df.groupby('group'), 1):
        group['name'].to_csv(f'group-{i}.csv', index=False)
    

    编辑:对于文件中的第一个值是一个想法,创建 MultiIndex 喜欢:

    for i, (n, group) in enumerate(df.groupby('group'), 1):
        g = group[['name']]
        g.columns = [[n], g.columns]
        #print (g)
        g.to_csv(f'group-{i}.csv', index=False)
    

    【讨论】:

    • 我只想保存'name'列
    • 不,我的意思是,它必须按“组”列分组,但必须保存“名称”列
    • @anarchy - 答案已编辑,需要df['name'].to_csv
    • 我想通了,因为你使用了相同的变量,不要使用 df 作为临时变量它弄乱了代码
    • 我能再问你一件事吗@jezrael 你知道是否有办法将组名附加到 csv 文件的第一行吗?像标题什么的
    【解决方案2】:

    你应该使用 pandas groupby 和 pd.to_csv()

    grouped = df.groupby('group')
    for num, g in grouped:
        name = 'group' + '.csv'
        g.to_csv(name)
    

    【讨论】:

    • 它保存所有列,我只想要'name'列,我该怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    相关资源
    最近更新 更多