由于下载的 csv 前几行中的数据,我在读取和更新 yfinance 的 csv 时遇到问题:
第一行包含我想要的列标题(还有标题 - '价格' - 我不想要)
第二行是垃圾
第三行有我想要的索引标题
下载的 csv(格式化)如下所示:
价格 | 调整关闭 | 关闭 | 高 | 低 | 打开 | 音量 |
---|---|---|---|---|---|---|
股票代码 | ^BVSP | ^BVSP | ^BVSP | ^BVSP | ^BVSP | ^BVSP |
日期 | ||||||
2014-01-02 | 50341.0 | 50341.0 | 51656.0 | 50246.0 | 51522.0 | 3476300 |
2014-01-03 | 50981.0 | 50981.0 | 50981.0 | 50269.0 | 50348.0 | 7360400 |
2014-01-06 | 50974.0 | 50974.0 | 51002.0 | 50451.0 | 50980.0 | 3727800 |
2014-01-07 | 50430.0 | 50430.0 | 51478.0 | 50429.0 | 50982.0 | 3339500 |
原始 .csv 文件如下所示:
Price,Adj Close,Close,High,Low,Open,Volume
Ticker,^BVSP,^BVSP,^BVSP,^BVSP,^BVSP,^BVSP
Date,,,,,,,
2014-01-02,50341.0,50341.0,51656.0,50246.0,51522.0,3476300
2014-01-03,50981.0,50981.0,50981.0,50269.0,50348.0,7360400
2014-01-06,50974.0,50974.0,51002.0,50451.0,50980.0,3727800
2014-01-07,50430.0,50430.0,51478.0,50429.0,50982.0,3339500
一旦阅读,我希望 df 看起来像这样,其中“日期”是日期时间索引:
日期 | 调整关闭 | 关闭 | 高 | 低 | 打开 | 音量 |
---|---|---|---|---|---|---|
2014-01-02 | 50341.0 | 50341.0 | 51656.0 | 50246.0 | 51522.0 | 3476300 |
2014-01-03 | 50981.0 | 50981.0 | 50981.0 | 50269.0 | 50348.0 | 7360400 |
2014-01-06 | 50974.0 | 50974.0 | 51002.0 | 50451.0 | 50980.0 | 3727800 |
2014-01-07 | 50430.0 | 50430.0 | 51478.0 | 50429.0 | 50982.0 | 3339500 |
我正在使用这段代码,它可以工作,但看起来很笨拙。
idx_df = pd.read_csv(
f'{data_folder}/INDEX_{idx_code}.csv',
header=None,
skiprows=3, # data starts on row 4
names=['Date', 'Adj Close', 'Close', 'High', 'Low', 'Open', 'Volume'],
index_col='Date'
)
idx_df.index = pd.to_datetime(idx_df.index, errors='coerce')
我的问题:
谢谢
一个可能的解决方案,其步骤是:
df = pd.read_csv(file.csv, skiprows=[2, 3])
df.rename({'Price': 'Date'}, axis=1)
输出:
Date Adj Close Close High Low Open Volume
0 2014-01-02 50341.0 50341.0 51656.0 50246.0 51522.0 3476300
1 2014-01-03 50981.0 50981.0 50981.0 50269.0 50348.0 7360400
2 2014-01-06 50974.0 50974.0 51002.0 50451.0 50980.0 3727800
3 2014-01-07 50430.0 50430.0 51478.0 50429.0 50982.0 3339500