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())
或者

否则,除非它们具有相同的长度和/或索引对齐,否则这是不可能的

作为经验法则;或者

  • 传递标量,或
  • 传递将NaN值的索引映射到其替换值的字典(例如,
    df.a.fillna({3:1,4:1})
    ),或
  • 索引对齐系列

  • 如果您可以保证
    df2['x']
    只有一个元素,那么请使用
    .item

    df['a'] = df['a'].fillna(df2.values.item())
    
    或者

    否则,除非它们具有相同的长度和/或索引对齐,否则这是不可能的

    作为经验法则;或者

  • 传递标量,或
  • 传递将NaN值的索引映射到其替换值的字典(例如,
    df.a.fillna({3:1,4:1})
    ),或
  • 索引对齐系列