Python数据帧插入丢失的数据

Python数据帧插入丢失的数据,python,pandas,interpolation,Python,Pandas,Interpolation,我有一个如下的数据集。我们只有一个月最后一天的数据,我正在尝试插入其余的数据,这是正确的方法吗 Date Australia China 2011-01-01 NaN NaN 2011-01-02 NaN NaN - - - - - - 2011-01-31 4.75 5.81 2011-02-01 NaN NaN 2011-02-02 NaN NaN - - - -

我有一个如下的数据集。我们只有一个月最后一天的数据,我正在尝试插入其余的数据,这是正确的方法吗

Date  Australia China
2011-01-01  NaN   NaN
2011-01-02  NaN   NaN
-           -     -
-           -     -
2011-01-31  4.75  5.81
2011-02-01  NaN   NaN
2011-02-02  NaN   NaN
-           -     -
-           -     -
2011-02-28  4.75  5.81
2011-03-01  NaN   NaN
2011-03-02  NaN   NaN
-           -     -
-           -     -
2011-03-31  4.75  6.06
2011-04-01  NaN   NaN
2011-04-02  NaN   NaN
-           -     -
-           -     -
2011-04-30  4.75  6.06
对于插值此数据帧以查找缺少的NaN值,我使用以下代码

import pandas as pd
df = pd.read_csv("data.csv", index_col="Date")
df.index = pd.DatetimeIndex(df.index)
df.interpolate(method='linear', axis=0).ffill().bfill()
但是我得到了一个错误“TypeError:不能用所有NaN进行插值。”

这里可能出了什么问题,我该如何解决


谢谢。

在插值之前,您可以尝试从数据集中删除NaN

import pandas as pd
df = pd.read_csv("data.csv", index_col="Date")
df = df.dropna()
df.index = pd.DatetimeIndex(df.index)
df.interpolate(method='linear', axis=0).ffill().bfill()

您可以尝试通过以下方式将
dataframe
转换为
float

您可以省略
ffill()
,因为
NaN
仅位于
数据帧的第一行中:

df = df.interpolate(method='linear', axis=0).ffill().bfill()
致:


这个错误是不言自明的。你可以试着按照这句话删除NaN,嗨,谢谢你的帮助,但是我能在这些行中填充什么呢?@Unnikrishnan我想已经给出了很好的答案。您的数据非常稀疏,因此您可能想质疑实际插入如此大量的数据是否是一个好主意。您有多确定这些值是否正确?这些NaN行不在CSV中,我使用代码df=df.reindex(pd.date\u range(“2011-01-01”,“2011-10-31”),fill\u value=np.NaN添加了它。否则,我如何填充这些行?
print df

            Australia  China
2011-01-01       4.75   5.81
2011-01-02       4.75   5.81
2011-01-03       4.75   5.81
2011-01-04       4.75   5.81
2011-01-05       4.75   5.81
2011-01-06       4.75   5.81
2011-01-07       4.75   5.81
2011-01-08       4.75   5.81
2011-01-09       4.75   5.81
2011-01-10       4.75   5.81
2011-01-11       4.75   5.81
2011-01-12       4.75   5.81
2011-01-13       4.75   5.81
2011-01-14       4.75   5.81
2011-01-15       4.75   5.81
2011-01-16       4.75   5.81
2011-01-17       4.75   5.81
2011-01-18       4.75   5.81
2011-01-19       4.75   5.81
2011-01-20       4.75   5.81
2011-01-21       4.75   5.81
2011-01-22       4.75   5.81
2011-01-23       4.75   5.81
2011-01-24       4.75   5.81
2011-01-25       4.75   5.81
2011-01-26       4.75   5.81
2011-01-27       4.75   5.81
2011-01-28       4.75   5.81
2011-01-29       4.75   5.81
2011-01-30       4.75   5.81
...               ...    ...
2011-10-02       4.75   6.06
2011-10-03       4.75   6.06
2011-10-04       4.75   6.06
2011-10-05       4.75   6.06
2011-10-06       4.75   6.06
2011-10-07       4.75   6.06
2011-10-08       4.75   6.06
2011-10-09       4.75   6.06
2011-10-10       4.75   6.06
2011-10-11       4.75   6.06
2011-10-12       4.75   6.06
2011-10-13       4.75   6.06
2011-10-14       4.75   6.06
2011-10-15       4.75   6.06
2011-10-16       4.75   6.06
2011-10-17       4.75   6.06
2011-10-18       4.75   6.06
2011-10-19       4.75   6.06
2011-10-20       4.75   6.06
2011-10-21       4.75   6.06
2011-10-22       4.75   6.06
2011-10-23       4.75   6.06
2011-10-24       4.75   6.06
2011-10-25       4.75   6.06
2011-10-26       4.75   6.06
2011-10-27       4.75   6.06
2011-10-28       4.75   6.06
2011-10-29       4.75   6.06
2011-10-30       4.75   6.06
2011-10-31       4.75   6.06

[304 rows x 2 columns]
df = df.interpolate(method='linear', axis=0).ffill().bfill()
df = df.interpolate(method='linear', axis=0).bfill()