python - 使用 pandas 循环合并大量 csv 文件

标签 python loops csv merge pandas

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

截至目前,我能够获取文件,但我无法确定一种方法来开发一种方法来在每个读取的 csv 上迭代数据帧,然后将所有这些数据帧合并在一起并推出一个csv 文件。 现在我正在使用三个具有公共(public) 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 

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

最佳答案

简单的例子:

# 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=['',''])    

关于python - 使用 pandas 循环合并大量 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19945091/

相关文章:

arrays - 遍历数组 - 只打印一次?

javascript - 在 JavaScript 中使用 break 与 find() 的 for 循环

python - 在 csv 中存储列表以在 r 中访问

ruby-on-rails - sucker_punch worker 可以在 heroku 上运行多长时间?

loops - 查找具有多个嵌套循环的Big-O?

ios - 如何使用 Swift 创建 CSV 文件

python - 如何在 gdb 中的 python 函数上设置断点

python - 通过 CLI 访问传递给 Airflow 的配置参数

python - pip 的 -H 标志是什么?

python - numpy 数组之间的 "in"运算符是什么意思?