python - 重新索引 python 数据框正在创建 NaN 值

标签 python pandas

我有一个如下所示的数据框,其中包含每月数据点:

   Date        Value
1  2010-01-01  18.45
2  2010-02-01  18.13
3  2010-03-01  18.25
4  2010-04-01  17.92
5  2010-05-01  18.85 

我想将其设为每日数据,并用当前月份值填充生成的新日期。例如:

   Date        Value
1  2010-01-01  18.45
2  2010-01-02  18.45
3  2010-01-03  18.45
4  2010-01-04  18.45
5  2010-01-05  18.45 
....

这是我用来添加临时日期并填充值的代码:

today = get_datetime('US/Eastern') #.strftime('%Y-%m-%d')
enddate='1881-01-01'
idx = pd.date_range(enddate, today.strftime('%Y-%m-%d'), freq='D')
df = df.reindex(idx)
df = df.fillna(method = 'ffill')

输出如下:

                     Date   Value
2010-01-01 00:00:00  NaN    NaN
2010-01-02 00:00:00  NaN    NaN
2010-01-03 00:00:00  NaN    NaN
2010-01-04 00:00:00  NaN    NaN
2010-01-05 00:00:00  NaN    NaN 

日志显示 NaN 值出现在调用 .fillna 方法之前。所以前向填充不是罪魁祸首。

有什么想法为什么会发生这种情况吗?

最佳答案

选项 3
最安全的方法,非常通用
上采样到每日,然后每月进行一次转换分组

这很重要的原因是您的日子可能不会落在该月的第一天。如果您想确保该天的值在该月中每隔一天广播一次,请执行以下操作

df.set_index('Date').asfreq('D') \
    .groupby(pd.TimeGrouper('M')).Value \
    .transform('first').reset_index()

选项 2
asfreq

df.set_index('Date').asfreq('D').ffill().reset_index()

选项 3
重新采样

df.set_index('Date').resample('D').first().ffill().reset_index()

对于pandas=0.16.1

df.set_index('Date').resample('D').ffill().reset_index()
<小时/>

所有这些都在此示例数据集上产生相同的结果

enter image description here

关于python - 重新索引 python 数据框正在创建 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41624967/

相关文章:

Python递归执行try except while条件满足

python - 在 Python 项目中管理资源

python - 如何使用 Pandas Timestamp 折叠参数?

python - 如何有效地净化pandas数据框?

python - django.core.exceptions.AppRegistryNotReady : Apps aren't loaded yet. django 1.8

python - 使用 XPath 和 Scrapy/lxml 排除特定子节点

python - Numpy:找到两个 3-D 数组之间的欧氏距离

python - Pandas 通过局部变量查询并获取空值

python - ValueError : The truth value of a Series is ambiguous. 使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 df[条件]

pandas - 在 DataFrame 上选择多个横截面的正确方法