将基于重复值的数据框拆分为多个csv文件

时间:2019-12-15 01:15:16

标签: python pandas csv dataframe split

我有一个包含多列的数据集,但只关注一个称为“ VAL”的列。此列中的每个值都介于0到4之间,因此我想根据这些重复值将其分为5个单独的数据帧,然后将每个数据帧导出到单独的csv文件中。

我已经能够使用熊猫对数字进行排序,但是现在我需要将值分成较小的数据集,同时要记住我有多个文件,所以我想这样做是为了实现for循环?

  

这是我目前的输出

 A       B      C      D      E      F      G         VAL   FILE
954     380    158    166    431    201    769         0  001.csv
1142    348    203    962      0    878   1023         0  001.csv
1688    279    229      0    488   1007      0         0  001.csv
4792    371    420     29    372      0    745         0  001.csv
2106    352     76    196    388      0    695         0  001.csv
    ...    ...    ...    ...    ...    ...       ...      ...
5634    441    283    277    788     45    585         4  001.csv
827     672    606     24   1023    463    742         4  001.csv
6703    324    203      0    623    214    726         4  001.csv
9056    604    398      0    981      0    633         4  001.csv
0       574    338    144    942    608    793         4  001.csv
  

这就是我想要的样子

 A       B      C      D      E      F      G         VAL   FILE
954     380    158    166    431    201    769         0  val_0.csv
1142    348    203    962      0    878   1023         0  val_0.csv
1688    279    229      0    488   1007      0         0  val_0.csv
4792    371    420     29    372      0    745         0  val_0.csv
2106    352     76    196    388      0    695         0  val_0.csv


 A       B      C      D      E      F      G         VAL   FILE
5634    441    283    277    788     45    585         4  val_4.csv
827     672    606     24   1023    463    742         4  val_4.csv
6703    324    203      0    623    214    726         4  val_4.csv
9056    604    398      0    981      0    633         4  val_4.csv
0       574    338    144    942    608    793         4  val_4.csv

2 个答案:

答案 0 :(得分:0)

这里有一个示例,其中C列类似于您的VAL列:

from io import StringIO

import pandas as pd

data = """
A,B,C
5d8b,N,1
5d8b,A,1
5d8b,B,2
5d8b,C,2
5d8b,Y,3
5d8b,X,3
"""

df = pd.read_csv(StringIO(data), sep=',')

for key, group in df.groupby('C'):
    group.to_csv(f'df_{key}.csv', index=False)

答案 1 :(得分:0)

更改文件以匹配预期的输出。

df = pd.read_clipboard(sep'\s+')
df['FILE'] = 'val_' + df['VAL'] + '.csv'

然后对VAL进行分组并编写您的csv

for x,y in df.groupby('VAL'):
    file_name = y['FILE'].unique().tolist()[0]
    y.to_csv(f"{file_name}",index=False)

这会根据您的数据为我写两个csv。

enter image description here

for x,y in df.groupby('VAL'):
    print(y)
          A    B    C    D    E     F     G VAL       FILE
0   954  380  158  166  431   201   769   0  val_0.csv
1  1142  348  203  962    0   878  1023   0  val_0.csv
2  1688  279  229    0  488  1007     0   0  val_0.csv
3  4792  371  420   29  372     0   745   0  val_0.csv
4  2106  352   76  196  388     0   695   0  val_0.csv
       A    B    C    D     E    F    G VAL       FILE
6   5634  441  283  277   788   45  585   4  val_4.csv
7    827  672  606   24  1023  463  742   4  val_4.csv
8   6703  324  203    0   623  214  726   4  val_4.csv
9   9056  604  398    0   981    0  633   4  val_4.csv
10     0  574  338  144   942  608  793   4  val_4.csv