繁体   English   中英

Import multiple csv files into pandas and concatenate into one DataFrame where 1st column same in all csv and no headers of data just file name

[英]Import multiple csv files into pandas and concatenate into one DataFrame where 1st column same in all csv and no headers of data just file name

Import multiple CSV files into pandas and concatenate into one DataFrame where 1st column same in all csv and no headers of data just file name.

在所有 CSV 中只有文件名描述了其中数据的含义。 在所有 CSV 文件中没有 header。 第一列在所有 CSV 文件中都很常见。

如何将所有 CSV 文件合并到 python 中的一个数据集。 代码:

import os
import pandas as pd
import glob

path= "....\\data"
os.chdir(path)
results = pd.DataFrame()

for counter, current_file in enumerate(glob.glob("*.csv")):
    namedf = pd.read_csv(current_file, header=None)
    print(namedf)
    results = results.merge(namedf, on='0')

results.to_csv('Combined.csv', index=None, header=None)

由于您没有写 headers ,我认为应该使用header=None来执行阅读。 使用header=filename是一个非常奇怪的概念。

我假设您有前 2 个输入 DataFrame,如下所示:

   0     1     2
0  A  Bbb1  Ccc1
1  B  Bbb2  Ccc2
2  C  Bbb3  Ccc3
3  D  Bbb4  Ccc4

   0     1     2
0  A  Ddd1  Eee1
1  B  Ddd2  Eee2
2  C  Ddd3  Eee3
3  D  Ddd4  Eee4

在第一列中具有相同的内容。

据我了解,您希望在第一列的共同值上水平加入(实际上合并)它们。

要合并前 2 个 DataFrame,比如说dfdf2你可以这样做:

df = pd.merge(df, df2, on=[0], how='outer')
df.columns = [ n for n in range(len(df.columns)) ]

然后合并的内容回到df中,列重命名为连续整数:

   0     1     2     3     4
0  A  Bbb1  Ccc1  Ddd1  Eee1
1  B  Bbb2  Ccc2  Ddd2  Eee2
2  C  Bbb3  Ccc3  Ddd3  Eee3
3  D  Bbb4  Ccc4  Ddd4  Eee4

这样您就不会重复第一列(合并键)。

因此,您读取和合并源文件的循环可能类似于:

for counter, current_file in enumerate(glob.glob("*.csv")):
    print(f'{counter}: {current_file}')
    if counter == 0:
        df = pd.read_csv(current_file, header=None)
    else:
        df2 = pd.read_csv(current_file, header=None)
        df = pd.merge(df, df2, on=[0], how='outer')
        df.columns = [ n for n in range(len(df.columns)) ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM