如何通过从另一列复制值来填充缺少的数据帧值

2024-05-29 02:26:32 发布

您现在位置:Python中文网/ 问答频道 /正文

米克·贾格尔的姓氏在一份资料中不见了。只指定了名字和乐队的名字

import pandas as pd

df = pd.DataFrame({ 'fist': ['John', 'Mick'], 
                    'last':['Lennon', ''], 
                    'band':['Beatles', 'Rolling Stones'] })

我可以轻松地为缺少的字段分配一个新值,方法是:

df['last'][df['last'] == ''] = 'Jagger'

但是我宁愿通过复制从相应的“band”列中获取的值来填充它,而不是指定一个新值“Jagger”。所以最终结果是:

             band  fist            last
0         Beatles  John          Lennon
1  Rolling Stones  Mick  Rolling Stones

如何实现


Tags: dfband名字johnpdlastrolling姓氏
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

可以使用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

相关问题 更多 >

    热门问题