如何通过复制另一列中的值来填充缺少的DataFrame值

时间:2016-10-26 00:06:17

标签: python pandas dataframe

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

如何实现它?

2 个答案:

答案 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