首页 > 解决方案 > 重新索引用 NaN 替换值

问题描述

我正在尝试在数据框中填写缺失的时间。当我重新索引时,缺失的时间被填充,但我的原始值消失了,一切都变成了 NaN。我的代码如下:

data = {'date':["2010-03-01 00:03:00","2010-03-01 00:05:00"], 'num':["1","2"]}
df_test = pd.DataFrame(data,columns = ['date','num'])
pd.to_datetime(df_test['date'], format='%Y-%m-%d %H:%M:%S')
df_test.set_index('date', inplace=True)
df_test2 = df_test.reindex(pd.date_range(df_test.index[0], df_test.index[-1], freq='Min')) 

df_test

                       num
date    
2010-03-01 00:03:00     1
2010-03-01 00:05:00     2

df_test2

                        num
2010-03-01 00:03:00     NaN
2010-03-01 00:04:00     NaN
2010-03-01 00:05:00     NaN

标签: pythonpandas

解决方案


这里有必要将转换后的列分配给datetimes,因为to_datetime不能就地工作:

data = {'date':["2010-03-01 00:03:00","2010-03-01 00:05:00"], 'num':["1","2"]}
df_test = pd.DataFrame(data,columns = ['date','num'])
df_test['date'] = pd.to_datetime(df_test['date'], format='%Y-%m-%d %H:%M:%S')
df_test.set_index('date', inplace=True)

df_test2 = df_test.reindex(pd.date_range(df_test.index[0], df_test.index[-1], freq='Min')) 

print (df_test2)

2010-03-01 00:03:00    1
2010-03-01 00:04:00  NaN
2010-03-01 00:05:00    2

另一个解决方案DataFrame.asfreq

df_test2 = df_test.asfreq('Min')
print (df_test2)
                     num
date                    
2010-03-01 00:03:00    1
2010-03-01 00:04:00  NaN
2010-03-01 00:05:00    2

推荐阅读