我尝试使用另一个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']
中的缺失值?
答案 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
否则,除非它们具有相同的长度和/或索引对齐,否则这是不可能的。
根据经验;任
df.a.fillna({3 : 1, 4 : 1})
)或答案 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