我正在尝试重新索引Pandas的日期。这是因为有些日期丢失了,比如周末或国家假日。
要做到这一点,我使用以下代码:
import pandas as pd
import yfinance as yf
import datetime
start = datetime.date(2015,1,1)
end = datetime.date.today()
df = yf.download('F', start, end, interval ='1d', progress = False)
df.index = df.index.strftime('%Y-%m-%d')
full_dates = pd.date_range(start, end)
df.reindex(full_dates)
此代码生成此 Dataframe :
Open High Low Close Adj Close Volume
2015-01-01 NaN NaN NaN NaN NaN NaN
2015-01-02 NaN NaN NaN NaN NaN NaN
2015-01-03 NaN NaN NaN NaN NaN NaN
2015-01-04 NaN NaN NaN NaN NaN NaN
2015-01-05 NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ...
2023-01-13 NaN NaN NaN NaN NaN NaN
2023-01-14 NaN NaN NaN NaN NaN NaN
2023-01-15 NaN NaN NaN NaN NaN NaN
2023-01-16 NaN NaN NaN NaN NaN NaN
2023-01-17 NaN NaN NaN NaN NaN NaN
你能告诉我为什么它不重新索引数据,而是显示NaN值吗?
===编辑===
可能是python版本的问题吗?我在python 3.7和3.10中运行了相同的代码
在python 3.7中
在python 3.10中
在python3.10中-如图所示,它是日期时间。
正在获取yf.download('F', start, end, interval ='1d', progress = False)
之后的日期时间而不获取strftime
2条答案
按热度按时间bnl4lu3b1#
删除按
df.index = df.index.strftime('%Y-%m-%d')
将DatetimeIndex
转换为字符串的操作,因此可以按日期时间将reindex
转换为字符串。编辑:存在
timezone
差异,要删除它,请使用DatetimeIndex.tz_convert
:slhcrj9b2#
您需要在
reindex
中使用字符串来保持同构类型,否则panda将无法匹配带有Timestamp(例如pd.Timestamp('2015-01-02')
)的字符串(例如2015-01-02
):输出: