【问题标题】:output multiple files based on column value python pandas根据列值python pandas输出多个文件
【发布时间】:2016-05-13 17:41:05
【问题描述】:

我有一个示例熊猫数据框:

import pandas as pd

df = {'ID': [73, 68,1,94,42,22, 28,70,47, 46,17, 19, 56, 33 ],
  'CloneID': [1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 ],
  'VGene': ['64D', '64D', '64D', 61, 61, 61, 311, 311, 311, 311, 311,  311, 311, 311]}
df = pd.DataFrame(df)

看起来像这样:

df
Out[7]: 
    CloneID  ID VGene
0         1  73   64D
1         1  68   64D
2         1   1   64D
3         1  94    61
4         1  42    61
5         2  22    61
6         2  28   311
7         3  70   311
8         3  47   311
9         3  46   311
10        4  17   311
11        4  19   311
12        4  56   311
13        4  33   311

我想编写一个简单的脚本来将每个 cloneID 输出到不同的输出文件。所以在这种情况下会有 4 个不同的文件。 第一个文件将被命名为“CloneID1.txt”,它看起来像这样:

CloneID  ID   VGene
     1   73   64D
     1   68   64D
     1   1    64D
     1   94   61
     1   42   61

第二个文件将命名为“CloneID2.txt”:

CloneID  ID  VGene
     2   22   61
     2   28   311

第三个文件将命名为“CloneID3.txt”:

CloneID  ID  VGene
     3   70   311
     3   47   311
     3   46   311

最后一个文件是“CloneID4.txt”:

CloneID  ID VGene 
    4    17   311
    4    19   311
    4    56   311
    4    33   311

我在网上找到的代码是:

import pandas as pd
data = pd.read_excel('data.xlsx')

for group_name, data in data.groupby('CloneID'):
    with open('results.csv', 'a') as f:
        data.to_csv(f)

但它将所有内容输出到一个文件而不是多个文件。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以执行以下操作:

    In [19]:
    gp = df.groupby('CloneID')
    for g in gp.groups:
        print('CloneID' + str(g) + '.txt')
        print(gp.get_group(g).to_csv())
    
    CloneID1.txt
    ,CloneID,ID,VGene
    0,1,73,64D
    1,1,68,64D
    2,1,1,64D
    3,1,94,61
    4,1,42,61
    
    CloneID2.txt
    ,CloneID,ID,VGene
    5,2,22,61
    6,2,28,311
    
    CloneID3.txt
    ,CloneID,ID,VGene
    7,3,70,311
    8,3,47,311
    9,3,46,311
    
    CloneID4.txt
    ,CloneID,ID,VGene
    10,4,17,311
    11,4,19,311
    12,4,56,311
    13,4,33,311
    

    所以在这里我们遍历for g in gp.groups: 中的组,并使用它来创建结果文件路径名并在组上调用to_csv,因此以下内容应该适合您:

    gp = df.groupby('CloneID')
    for g in gp.groups:
        path = 'CloneID' + str(g) + '.txt'
        gp.get_group(g).to_csv(path)
    

    其实下面的会更简单:

    gp = df.groupby('CloneID')
    gp.apply(lambda x: x.to_csv('CloneID' + str(x.name) + '.txt'))
    

    【讨论】:

    • 如果我们有一个 1 gb 的文件,这会有多快?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2018-05-19
    • 2019-08-10
    • 2017-03-28
    • 2021-03-02
    • 2017-05-25
    相关资源
    最近更新 更多