我閱讀了多個與此類似的問題,但沒有專門針對此用例。
我在一個檔案夾中有多個ticker.csv檔案,例如:
ZZZ.TO.csv 包含:
Date Open High Low Close Volume
0 2017-03-14 28.347332 28.347332 27.871055 28.267952 22400
1 2017-03-15 28.320875 28.400254 27.959257 28.188574 39200
2 2017-03-16 28.179758 28.797155 28.126837 28.708954 51600
3 2017-03-17 28.576658 28.691315 28.091559 28.550196 57400
我想創建一個資料框,其中包含每個檔案中的所有“日期”和“關閉”資料。將“日期”設定為索引,并將每個代碼作為最終資料框中的列標題。
所以最終的資料框看起來像這樣:
Date FOO.TO ZOMD.V ZEN.V TICKER.BAR
2017-03-14 28.347332 28.347332 27.871055 28.267952
2017-03-15 28.320875 28.400254 27.959257 28.188574
2017-03-16 28.179758 28.797155 28.126837 28.708954
2017-03-17 28.576658 28.691315 28.091559 28.550196
這是我嘗試過的:
import pandas as pd
import glob
path = r'/path_where_files_are/'
all_files = glob.glob(path "/*.csv")
all_files.sort()
fields = ['Date','Close']
list = []
for filename in all_files:
df = pd.read_csv(filename, header=0, usecols=fields)
df.set_index(['Date'], inplace=True)
list.append(df)
frame = pd.concat(list, axis=0)
但它產生:
Date Close
2017-03-14 0.050000
2017-09-21 0.040000
2017-09-22 0.040000
2017-10-13 0.100000
2017-10-16 0.110000
歡迎任何幫助。干杯。
uj5u.com熱心網友回復:
你可以試試:
import pandas as pd
import pathlib
path = pathlib.Path(r'./data2')
data = {}
for filename in sorted(path.glob('*.csv')):
data[filename.stem] = pd.read_csv(filename, index_col='Date',
usecols=['Date', 'Close'],
parse_dates=['Date']).squeeze()
df = pd.concat(data, axis=1)
輸出:
>>> df
ZEN.V ZZZ.TO
Date
2017-03-14 28.267952 28.267952
2017-03-15 28.188574 28.188574
2017-03-16 28.708954 28.708954
2017-03-17 28.550196 28.550196
uj5u.com熱心網友回復:
幾件事可以幫助你:
- 你想水平連接,所以使用
pd.concat(..., axis=1)orpd.concat(..., axis='columns'); - 閱讀后不要忘記重命名資料框中的關閉列;
- 最好不要覆寫 Python 內置函式的名稱——因此,請
list使用描述性的名稱來代替dfs_to_merge.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/444464.html
上一篇:回填基于組pandas的列
下一篇:在R中的char列中轉換整數值
