如果缺少另一列,请替换其中一列的值

时间:2019-09-12 17:54:12

标签: python pandas

数据

我有一个名为data的数据框,如下所示:

Name              ID
JAMES             252
STEPHEN           578
JOY               nan
ROGELIO           473
FACS              nan
CLIFFORD          793
data['Name'] is a column of strings, and data['ID'] has numeric values.

目标

我想在数据['ID']缺失时(即nan)用缺失值NaN替换数据['Name']。

结果将是:

Name              ID
JAMES             252
STEPHEN           578
NaN               nan
ROGELIO           473
NaN               nan
CLIFFORD          793

我已经在线搜索了,但是类似的答案都是关于使用fillna()的,这不是我想要的。您对此有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您可以使用.loc函数查找df['ID']为空的所有索引,然后将df['NAME']设置为np.nan。

import numpy as np

df.loc[df['ID'].isnull() , 'NAME'] = np.nan

答案 1 :(得分:1)

这种方法怎么样?

import pandas as pd
import numpy as np
a = {'Name':['JAMES','STEPHEN','JOY','ROGELIO','FACS','CLIFFORD'],'ID':[252,578,np.nan,473,np.nan,793]}
df = pd.DataFrame(a)

df.loc[df['ID'].isnull() , 'Name'] = np.nan
print(df)

输出:

       Name     ID
0     JAMES  252.0
1   STEPHEN  578.0
2       NaN    NaN
3   ROGELIO  473.0
4       NaN    NaN
5  CLIFFORD  793.0

如果要删除NaN值,请添加以下内容:

df = df.dropna(how='any')
print(df)

输出:

       Name     ID
0     JAMES  252.0
1   STEPHEN  578.0
3   ROGELIO  473.0
5  CLIFFORD  793.0

编辑:我做了另一种方法,现在是正确的。

答案 2 :(得分:1)

pandas.DataFrame.mask非常适合:

path('<slug:project>', views.project_detail, name='detail')

输出:

df.mask(df['ID'].isnull())