[英]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.