【发布时间】:2021-08-11 08:39:52
【问题描述】:
我有一个最初创建以下数据框的 CSV:
Date Portfoliovalue
0 2021-05-01 50000.0
1 2021-05-05 52304.0
使用下面的脚本,我想用 NaN 填充缺失的日期,并在 Portfoliovalue 列中有一个对应的 NaN 值。所以结果是这样的:
Date Portfoliovalue
0 2021-05-01 50000.0
1 2021-05-02 NaN
2 2021-05-03 NaN
3 2021-05-04 NaN
4 2021-05-05 52304.0
我先试了这里的方法:Fill the missing date values in a Pandas Dataframe column
但是,bfill 替换了我所有的 NaN,删除它只会返回错误。
到目前为止,我已经尝试过:
df = pd.read_csv("Tickers_test5.csv")
df2 = pd.read_csv("Portfoliovalues.csv")
portfolio_value = df['Currentvalue'].sum()
portfolio_value = portfolio_value + cash
date = datetime.date(datetime.now())
df2.loc[len(df2)] = [date, portfolio_value]
print(df2.asfreq('D'))
但是,这只会返回:
Date Portfoliovalue
1970-01-01 NaN NaN
感谢您的帮助。这个社区的帮助给我留下了深刻的印象。
快速更新:
我已添加代码,以便填补我缺失的日期。但是,它是程序的一部分,该程序每次启动时都会尝试更新丢失的日期。因此,当我执行代码并且没有丢失任何日期时,我收到以下错误:
ValueError:无法从重复的轴重新索引”
代码如下:
df2 = pd.read_csv("Portfoliovalues.csv")
portfolio_value = df['Currentvalue'].sum()
date = datetime.date(datetime.now())
df2.loc[date, 'Portfoliovalue'] = portfolio_value
#Solution provided by Uts after asking on Stackoverflow
df2.Date = pd.to_datetime(df2.Date)
df2 = df2.set_index('Date').asfreq('D').reset_index()
因此,从外观上看,代码添加了一个重复的日期,这会导致 .reindex() 函数引发 ValueError。但是,我不确定如何进行。 .reindex() 是否有替代方法,或者今天日期的分配可能需要更改?
【问题讨论】:
-
您的源日期从 1 开始并以 10 结束,但是,您的预期输出在第 5 天结束
-
查看这篇文章对我有帮助 stackoverflow.com/a/54517808/14566331