Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于列值输出多个文件_Python_Pandas - Fatal编程技术网

Python 基于列值输出多个文件

Python 基于列值输出多个文件,python,pandas,Python,Pandas,我有一个熊猫数据框示例: 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.

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

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  ID   VGene
     1   73   64D
     1   68   64D
     1   1    64D
     1   94   61
     1   42   61
我想编写一个简单的脚本,将每个克隆ID输出到不同的输出文件。所以在这种情况下,将有4个不同的文件。 第一个文件名为“CloneID1.txt”,如下所示:

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  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)

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

您可以执行以下操作:

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
因此,在这里,我们对gp.groups中g的
中的组进行迭代:
,并使用它创建结果文件路径名,并调用
对该组执行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'))

您可以执行以下操作:

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
因此,在这里,我们对gp.groups中g的
中的组进行迭代:
,并使用它创建结果文件路径名,并调用
对该组执行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'))

如果我们有一个1GB的文件,速度会有多快?如果我们有一个1GB的文件,速度会有多快?