python pandas合并多个csv文件

Say*_*uda 6 python csv datetime pandas

我有大约600个csv文件数据集,它们都有相同的列名['DateTime','Actual','Consensus','Previous','Revised'],所有经济指标和所有时间序列数据集.

目的是在一个csv文件中将它们合并在一起.

使用'DateTime'作为索引.

我希望这个文件被索引的方式是时间线方式,这意味着让我们说第一个csv中的第一个事件日期为12/18/2017 10:00:00,第一个事件发生在第二个csv中,日期为12/29/2017 09:00:00和第三次csv的第一次活动日期为12/20/2017 09:00:00.

因此,我想将它们编入索引后面的第一个和更新的一个,等等,尽管源csv最初来自.

我试图合并其中只有3个作为实验,而问题是'DateTime',因为它将这些中的3个打印在一起就像这样('12/18/2017 2017 10:00:00','12/29/2017 2017 09 :00:00','12/20/2017 09:00:00')以下是代码:

import pandas as pd


df1 = pd.read_csv("E:\Business\Economic Indicators\Consumer Price Index - Core (YoY) - European Monetary Union.csv")
df2 = pd.read_csv("E:\Business\Economic Indicators\Private loans (YoY) - European Monetary Union.csv")
df3 = pd.read_csv("E:\Business\Economic Indicators\Current Account s.a - European Monetary Union.csv")

df = pd.concat([df1, df2, df3], axis=1, join='inner')
df.set_index('DateTime', inplace=True)

print(df.head())
df.to_csv('df.csv')
Run Code Online (Sandbox Code Playgroud)

Par*_*ait 7

考虑使用read_csv()args,index_colparse_dates在导入期间创建索引并格式化为datetime.然后运行所需的水平合并.下面假设日期在csv的第一列.最后使用sort_index()最终数据帧对日期时间进行排序.

df1 = pd.read_csv(r"E:\Business\Economic Indicators\Consumer Price Index - Core (YoY) - European Monetary Union.csv",
                  index_col=[0], parse_dates=[0])
df2 = pd.read_csv(r"E:\Business\Economic Indicators\Private loans (YoY) - European Monetary Union.csv",
                  index_col=[0], parse_dates=[0])
df3 = pd.read_csv(r"E:\Business\Economic Indicators\Current Account s.a - European Monetary Union.csv",
                  index_col=[0], parse_dates=[0])

finaldf = pd.concat([df1, df2, df3], axis=1, join='inner').sort_index()
Run Code Online (Sandbox Code Playgroud)

对于DRY-er方法,尤其是数百个csv文件,请使用列表推导

import os
...
os.chdir('E:\\Business\\Economic Indicators')

dfs = [pd.read_csv(f, index_col=[0], parse_dates=[0])
        for f in os.listdir(os.getcwd()) if f.endswith('csv')]

finaldf = pd.concat(dfs, axis=1, join='inner').sort_index()
Run Code Online (Sandbox Code Playgroud)