【问题标题】:Extraxt different csv files from one csv based on a column根据列从一个csv中提取不同的csv文件
【发布时间】:2020-04-16 18:28:16
【问题描述】:

您好,我是 python 初学者。 我想根据列中的值从一个大 csv 中提取不同的 csv 文件。 我的 csv 看起来像这样:

IDMember    Risk    Area
1             2       30
2             1       20
3             2       10

我有数千个具有相同 IDMember 的值,我想为每个这个 ID 提取一个 csv,该 ID 在 csv 文件名中。 我该怎么做?

我正在尝试这样的事情,但我认为我错过了一些东西:

import os
import pandas

df = r'MyCSVPath'
outFolder = r'MyOutputFolder'

col = 'MemberID'

for col in df.groupby('MemberID'):
    df.to_csv(f'{MemberID}.csv')

【问题讨论】:

  • for i in df['MemberID'].unique(): df[df['MemberID'].eq(i)].to_csv(....)
  • @DaemonPainter:我认为这并不能真正解决 OP 的问题。 groupby 可能更符合主题...
  • 这里有不同的问题:1/打开一个csv文件并将一个csv文件读入pandas DataFrame:openread_csv 2/根据一列中的值拆分一个csv:@ 987654330@ 并在 GroupBy 上迭代 3/ 在文件夹中打开一个新文件:os.path 并再次 open 4/ 将数据帧保存到 csv 文件 to_csv。也许您应该尝试一次只关注一个问题...我认为阅读How to Ask 可能很有用:-)

标签: python pandas csv


【解决方案1】:

假设我们有一个重复 id 的数据框。

   IDMember  Risk  Area
0         1     2    30
1         2     1    20
2         3     2    10
3         4     2    15
4         1     2    45
5         2     2    40
6         4     3    50
7         1     3    30


脚本:


import os
import pandas as pd

df = pd.read_csv('csvFile.csv') #reading the csv file

df1 = df['IDMember'].drop_duplicates(keep='first', inplace=False) #creating dataframe showing unique ids

for elem in df1:  #iterating through each id
  df2 = df.loc[df['IDMember'] == elem]
  print(df2)
  df2.to_csv('IDmember'+str(elem)+'.csv')  #writing to separate csv by each id 

【讨论】:

  • 谢谢,实际上是在创建我需要的所有 csv 文件,但它们都是一样的,只是文件名不同。
  • 我把最后一行改成df1而不是df,文件的内容和我想要的不一样,但是只有与IDMember相关的列
  • 对不起,我错误地将 print() 放在那里。我已经编辑了帖子 - 现在它应该可以工作了。
  • 它不起作用,它只是给了我带有标题的空 csv。我更改了最后两行,df1 =... 和 df1.to_csv =...
  • 我已将数据框 df 的名称更改为 df2 - 问题是 df 在第一次迭代后更改并且 csv 文件为空。希望现在它终于可以工作了。
最近更新 更多