我有一种情况需要替换许多列中的字符串值:
对我来说,我有一系列步骤似乎应该起作用,但实际上没有作用; “就地”步骤不起作用。一些虚拟测试代码:
df = pd.DataFrame([[np.nan, 2, np.nan, np.nan],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5],
[np.nan, 3, np.nan, 'foo']],
columns=list('ABCD'))
计算替代值,例如从最后一列开始计算
special_value = pd.to_numeric(df['D'], errors='corece').min() / 2
special_value
0.5
df
pd.to_numeric(df['D'].dropna(), errors='coerce').fillna(value=special_value)
1 1.0
2 5.0
3 0.5
Name: D, dtype: float64
pd.to_numeric(df['D'].dropna(), errors='coerce').fillna(value=special_value, inplace = True)
0 NaN
1 1
2 5
3 foo
Name: D, dtype: object
答案 0 :(得分:1)
如果使用.fillna
,它将不会保留NaN值。
尝试一下:
def add_value(df,col):
condition = df[col].apply(lambda x : True if type(x) == int else False)
sp_value = df[col][condition].min()/2
df[col] = df[col].apply(lambda x : sp_value if type(x) == str else x)
输出是
add_value(df,'D')
A B C D
0 NaN 2.0 NaN NaN
1 3.0 4.0 NaN 1.0
2 NaN NaN NaN 5.0
3 NaN 3.0 NaN 0.5