Mick Jagger的姓氏在数据中缺失。只指定了第一个名字和乐队的名字
import pandas as pd
df = pd.DataFrame({ 'fist': ['John', 'Mick'],
'last':['Lennon', ''],
'band':['Beatles', 'Rolling Stones'] })
我可以使用以下方法轻松地为缺少的字段分配新值:
df['last'][df['last'] == ''] = 'Jagger'
但是我不是指定一个新值'Jagger',而是通过复制从相应的'band'列中获取的值来填充它。所以最终结果如下:
band fist last
0 Beatles John Lennon
1 Rolling Stones Mick Rolling Stones
如何实现它?
答案 0 :(得分:2)
您可以使用pandas.Series.where()
有条件地将当前系列的值替换为其他系列中的值:
df['last'].where(df['last'] != "", df.band)
#0 Lennon
#1 Rolling Stones
#Name: last, dtype: object
df['last'] = df['last'].where(df['last'] != "", df.band)
df
# band fist last
#0 Beatles John Lennon
#1 Rolling Stones Mick Rolling Stones
答案 1 :(得分:2)
缺少的数据通常是NaN值,而不是字符串。因此,如果你有NaN而不是'',你实际上可以将另一个column
传递给fillna()
方法:
import pandas as pd
import numpy as np
df = pd.DataFrame({ 'fist': ['John', 'Mick'],
'last':['Lennon', np.nan],
'band':['Beatles', 'Rolling Stones'] })
In[37]: df
Out[37]:
band fist last
0 Beatles John Lennon
1 Rolling Stones Mick NaN
现在使用fillna()
df['last'].fillna(df.band, inplace=True)
df
Out[44]:
band fist last
0 Beatles John Lennon
1 Rolling Stones Mick Rolling Stones