代码之家  ›  专栏  ›  技术社区  ›  anarchy

根据在另一列中的分组,将csv文件/pandas数据帧拆分为多个文件

  •  1
  • anarchy  · 技术社区  · 5 年前

    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 = []
    

    2 回复  |  直到 5 年前
        1
  •  1
  •   jezrael    5 年前

    如果需要,用组名代替 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)
    
        2
  •  0
  •   KaRaOkEy    5 年前

    你应该使用pandas groupby和pd.to\U csv()

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