我想用连续的值b
和1
在2
列中填写这些缺失的数字。
这就是我所做的:
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)
但是什么也没做。
答案 0 :(得分:1)
您无法按照here和documentation中的说明,向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