Python 不填充序列中的值
我试图用另一个数据框的列中的值来填充数据框中一列中缺少的值。以下是设置:Python 不填充序列中的值,python,pandas,Python,Pandas,我试图用另一个数据框的列中的值来填充数据框中一列中缺少的值。以下是设置: import numpy as np import pandas as pd df = pd.DataFrame({ 'a': [2, 3, 5, np.nan, np.nan], 'b': [10, 11, 13, 14, 15] }) df2 = pd.DataFrame({ 'x': [1] }) 我当然可以做到这一点,而且效果很好: df['a'] = df['a'].fillna(1
import numpy as np
import pandas as pd
df = pd.DataFrame({
'a': [2, 3, 5, np.nan, np.nan],
'b': [10, 11, 13, 14, 15]
})
df2 = pd.DataFrame({
'x': [1]
})
我当然可以做到这一点,而且效果很好:
df['a'] = df['a'].fillna(1)
但是,这会导致未填充缺少的值:
df['a'] = df['a'].fillna(df2['x'])
这将导致一个错误:
df['a'] = df['a'].fillna(df2['x'].values)
如何使用
df2['x']
中的值来填充df['a']
中缺少的值?我认为一个通用解决方案是通过[0]
为标量选择第一个值:
print (df2['x'].values[0])
1
df['a'] = df['a'].fillna(df2['x'].values[0])
#similar solution for select by loc
#df['a'] = df['a'].fillna(df2.loc[0, 'x'])
print (df)
a b
0 2.0 10
1 3.0 11
2 5.0 13
3 1.0 14
4 1.0 15
我认为一个通用的解决方案是通过
[0]
为标量选择第一个值:
print (df2['x'].values[0])
1
df['a'] = df['a'].fillna(df2['x'].values[0])
#similar solution for select by loc
#df['a'] = df['a'].fillna(df2.loc[0, 'x'])
print (df)
a b
0 2.0 10
1 3.0 11
2 5.0 13
3 1.0 14
4 1.0 15
如果您可以保证
df2['x']
只有一个元素,那么请使用.item
:
df['a'] = df['a'].fillna(df2.values.item())
或者
否则,除非它们具有相同的长度和/或索引对齐,否则这是不可能的
作为经验法则;或者
df.a.fillna({3:1,4:1})
),或如果您可以保证
df2['x']
只有一个元素,那么请使用.item
:
df['a'] = df['a'].fillna(df2.values.item())
或者
否则,除非它们具有相同的长度和/或索引对齐,否则这是不可能的
作为经验法则;或者
df.a.fillna({3:1,4:1})
),或