是否有python函数用连续值填充丢失的数据

时间:2019-01-15 15:23:35

标签: python

我想用连续的值b12列中填写这些缺失的数字。

这就是我所做的:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': [1, 4, 7,8,4],
'b': [1, np.nan, 3, np.nan, 5]})

df['b'].fillna({'b':[1,2]}, inplace=True)

但是什么也没做。

4 个答案:

答案 0 :(得分:1)

您无法按照heredocumentation中的说明,向fillna输入值列表。另外,如果您选择的是列,则无需告诉fillna使用哪个列。您可以这样做:

df.fillna({'b':1}, inplace=True)

df['b'].fillna(1, inplace=True)

顺便说一句,inplace正在熊猫中弃用,例如,首选的方式是

df = df.fillna({'b':1}) 

答案 1 :(得分:1)

一种方法是对数组使用loc

df.loc[df['b'].isnull(), 'b'] = [1, 2]

您尝试的操作是可能的,但使用fillna却很麻烦:

nulls = df['b'].isnull()
df['b'] = df['b'].fillna(pd.Series([1, 2], index=nulls[nulls].index))

可能正在寻找interpolate,但是上述解决方案在给定输入列表或数组的情况下是通用的。

另一方面,如果您想用序列1, 2, 3, etc填充空值,则可以使用cumsum

# fillna solution
df['b'] = df['b'].fillna(df['b'].isnull().cumsum())

# loc solution
nulls = df['b'].isnull()
df.loc[nulls, 'b'] = nulls.cumsum()

答案 2 :(得分:0)

您可以插值。示例:

s = pd.Series([0, 1, np.nan, 3])
s.interpolate()

0    0
1    1
2    2
3    3

答案 3 :(得分:0)

如果我正确理解“连续值1和2”的措辞,则解决方案可能是:

g++ -v