按列将csv拆分为多个csv文件

时间:2017-09-19 19:48:40

标签: python pandas csv dataframe

尝试学习Python并设法创建一个带有csv的脚本,将其转换为数据框,更改列,然后将csv输出到所需的样式。

我现在需要做的是能够根据我的第二列的内容输出多个csvs(首先是索引,我为输出删除了它)

我为唯一数据值设置了一个参数,然后在FOR循环中根据唯一数据值创建文件名和输出路径。

但是当我输出csv(data.to_csv)时,所有4个文件都相同且未经过滤。

这是我的代码

unique_code = data.import_code.unique() 
for importcode in unique_import_codes:     
    #print("%s" % importcode)             
    filename = importcode.replace(".","") + ".csv"   
    #print("%s" % filename)                
    path = r"C:/myrequiredpath/"     
    #print("%s" % path)                    
    data.to_csv(path+filename, index=False)

我的数据框称为数据 import_code是我的第二列(不是索引)

欢迎任何想法!

4 个答案:

答案 0 :(得分:2)

我这样做:

filename =  r"C:/myrequiredpath/{}.csv"

data.groupby('import_code') \
    .apply(lambda g: g.to_csv(filename.format(g.name), index=False))

答案 1 :(得分:0)

您的循环中没有任何地方可以选择数据子集。最后一行

data.to_csv(path+filename, index=False)

每次都用不同的文件名写出未更改的数据框。

答案 2 :(得分:0)

您可以使用Just ("quux", "quux", Just "")过滤数据:

loc

答案 3 :(得分:0)

如果您的目标只是导出文件,每个文件都是原始数据框的副本,并且使用唯一值作为名称,那么我会选择此路线。

unique_values = set(data['column_of_interest'])

for value in unique_values:
    filename = value + ".csv"         
    path = r"C:/myrequiredpath/"                        
    data.to_csv(path+filename, index=False)

如果您希望每个文件都是该数据子集的导出,请将其添加到您的循环中:

data[data['column of interest']==value]