Pandas fillna()没有填充系列中的值

时间:2018-03-08 15:52:22

标签: python pandas

我尝试使用另一个DataFrame列中的值填充DataFrame中的列中的缺失值。这是设置:

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
    }
}

我当然可以这样做而且有效:

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']中的缺失值?

2 个答案:

答案 0 :(得分:3)

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

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

或者,

df['a'] = df['a'].fillna(df2['x'].item())

df
     a   b
0  2.0  10
1  3.0  11
2  5.0  13
3  1.0  14
4  1.0  15

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

根据经验;任

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

答案 1 :(得分:1)

我认为一个通用的解决方案是通过[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