[英]python pandas merge multiple csv files
我有大约 600 个 csv 文件数据集,都具有相同的列名 ['DateTime', 'Actual', 'Consensus', 'Previous', 'Revised'],所有经济指标和所有时间序列数据集。
目的是将它们全部合并到一个 csv 文件中。
以 'DateTime' 作为索引。
我希望此文件索引的方式是时间线方式,这意味着假设第一个 csv 中的第一个事件日期为 12/18/2017 10:00:00,第二个 csv 中的第一个事件日期为 12/29/ 2017 年 09:00:00 和日期为 12/20/2017 09:00:00 的第三个 csv 中的第一个事件。
所以,我想先索引它们,然后再索引它们,等等,尽管它最初来自源 csv。
我试图合并其中的 3 个作为实验,问题是“DateTime”,因为它像这样将其中的 3 个打印在一起 ('12/18/2017 10:00:00', '12/29/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')
考虑使用read_csv()
args、 index_col和parse_dates在导入和格式化为日期时间期间创建索引。 然后运行您需要的水平合并。 下面假设日期在 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()
对于 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()
您正在尝试从许多具有相同列名的数据帧的行中构建一个大型数据帧。 axis
应为 0(默认值),而不是 1。此外,您无需指定连接类型。 这不会有任何影响,因为每个数据帧的列名都是相同的。
df = pd.concat([df1, df2, df3])
应该足以连接数据集。
(见https://pandas.pydata.org/pandas-docs/stable/merging.html )
然后您调用set_index
以使用 DateTime 列中的值定义索引应该可以工作。
问题有两个方面:将 csv 合并到单个数据帧中,然后按日期对其进行排序。
正如约翰史密斯指出的那样,要沿行合并数据帧,您需要使用:
df = pd.concat([df1,df2,df3])
然后你想设置一个索引并根据索引重新排序你的数据框。
df.set_index('DateTime', inplace=True)
df.sort_index(inplace=True)
或降序
df.sort_index(inplace=True,ascending=False)
(见https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_index.html )
timeindex = pd.date_range('2018/01/01','2018/01/10')
randtimeindex = np.random.permutation(timeindex)
# Create three dataframes
df1 = pd.DataFrame(index=range(3),data=np.random.rand(3,3),
columns=['Actual','Consensus','DateTime'])
df1.DateTime=randtimeindex[:3]
df2 = pd.DataFrame(index=range(3),data=np.random.rand(3,3),
columns=['Actual','Consensus','DateTime'])
df2.DateTime=randtimeindex[3:6]
df3 = pd.DataFrame(index=range(4),data=np.random.rand(4,3),
columns=['Actual','Consensus','DateTime'])
df3.DateTime=randtimeindex[6:]
# Merge them
df4 = pd.concat([df1, df2, df3], axis=0)
# Reindex the merged dataframe, and sort it
df4.set_index('DateTime', inplace=True)
df4.sort_index(inplace=True, ascending=False)
print(df4.head())
dataset_1 = pd.read_csv('csv path')
dataset_2 = pd.read_csv('csv path')
new_dataset = pd.merge(dataset_1, dataset_2, left_on='same column name', right_on=('same column name'), how=('how to join ex:left'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.