使用熊猫循环合并大量csv文件[重复]

Posted

技术标签:

【中文标题】使用熊猫循环合并大量csv文件[重复]【英文标题】:Looping a merge for a amount of csv files using pandas [duplicate] 【发布时间】:2013-11-25 12:59:32 【问题描述】:

现在我正在创建一个程序,它将 csv 文件组合成一个不重复的类似列。创建的列需要添加到相邻列的旁边。

截至目前,我能够获取文件,但我无法确定一种方法来开发一种方法来迭代每个读取的 csv 数据帧,然后将所有这些数据帧合并在一起并推出一个.csv 文件。 现在我正在用三个带有公共 ID 列的 csv 文件来测试它 我现在的情况如下:

        os.chdir(filedname)
        data = pd.merge([pd.DataFrame.from_csv(file) for
              file in glob.glob("*.csv")],on='ID')
        data.to_csv('merged.csv')

文件如下所示:

(File 1)  (File 2)
ID  BLA   ID  X   
1   2     1   55
2   3     2   2
3   4     3   12
4   5     4   52

并且目录中每个csv文件中除了ID列之外的每个不同的列应该相互合并以创建一个csv文件,如下所示:

ID BLA X
1  2   55
2  3   2
3  4   12
4  5   52 

任何建议都可以帮助我解决这个问题。

【问题讨论】:

你有一些小例子吗?例如,如果我有 2 个带有“B”列的 csv,但这些列中的数据不同,那么您想在“B”列中为结果 DataFrame 获取什么? 我添加了一些额外的信息和一个例子!对此感到抱歉。 两个文件的 ID 不同,所以你想加入 ID 还是只添加新列而不查看 ID 列? Oy vey,再次抱歉,我进行了编辑以使 ID 相同。 【参考方案1】:

简单示例:

# Demo DataFrames
df1 = pd.DataFrame([[1,2,3],[2,3,4],[3,1,3]], columns=['ID','BLA','X'])
df2 = pd.DataFrame([[1,2,3],[2,5,4],[3,10,100]], columns=['ID','X','BLA'])
df3 = pd.DataFrame([[1,2,3],[2,8,7],[3,0,0]], columns=['ID','BLA','D'])

# Demo DataFrames sequence
dfs = [df1,df2,df3]

# Merge DataFrames
df = pd.DataFrame(columns=['ID'])
for d in dfs:
    cols = [x for x in d.columns if x not in df.columns or x == 'ID']
    df = pd.merge(df, d[cols], on='ID', how='outer', suffixes=['',''])

# result
   ID  BLA  X  D
0   1    2  3  3
1   2    3  4  7
2   3    1  3  0

在你的情况下,它可能是这样的:

data = [pd.DataFrame.from_csv(f) for f in glob.glob("*.csv")]
df = pd.DataFrame(columns=['ID'])
for d in data:
    cols = [x for x in d.columns if x not in df.columns or x == 'ID']
    df = pd.merge(df, d[cols], on='ID', how='outer', suffixes=['',''])    

【讨论】:

我想创建一个循环,以便它将位于给定目录中的每个 CSV 文件的列添加到一个主要的“合并”CSV。这有帮助吗? @user2986038 更新了答案 我的输出是第一个csv文件(文件1)ID BLA 1 2 2 3 3 4 4 5 我也收到此错误 AssertionError: cannot create BlockManager._ref_locs 因为块 [FloatBlock: [ID, NCELLS, AREA, MEAN, STD, NCELLS_, AREA_, MEAN_, STD_, AREA_, MEAN_, STD_] , 12 x 756, dtype float64] 与重复项 [Index([u'ID', u'NCELLS', u'AREA', u'MEAN', u'STD', u'NCELLS_', u'AREA_', u'MEAN_', u'STD_', u'NCELLS_', u'AREA_', u'MEAN_', u'STD_'], dtype=object)] 没有设置 _ref_locs @user2986038 再次更改

以上是关于使用熊猫循环合并大量csv文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在for循环中使用熊猫csv_read读取csv文件

为啥熊猫转换后在csv文件的开头添加数字[重复]

合并不同目录中的熊猫csv

合并熊猫 groupBy 对象

使用批处理文件并排合并csv文件[重复]

Python 熊猫地图 CSV 文件