根据字符串替换列

时间:2021-04-01 11:36:44

标签: python pandas

我正在尝试根据我们在列名称中找到的第一个字母,用一个新变量“性别”替换“名称”列。

输入:

df['Name'].value_counts()

输出:

Mr. Gordon Hemmings     1
Miss Jane Wilkins       1
Mrs. Audrey North       1
Mrs. Wanda Sharp        1
Mr. Victor Hemmings     1
                       ..
Miss Heather Abraham    1
Mrs. Kylie Hart         1
Mr. Ian Langdon         1
Mr. Gordon Watson       1
Miss Irene Vance        1

Name: Name, Length: 4999, dtype: int64

现在,看到小姐、太太和小姐了吗?想到的第一个问题是:有多少个不同的词?

输入

df.Name.str.split().str[0].value_counts(dropna=False)

Mr.     3351
Mrs.     937
Miss     711
NaN        1

Name: Name, dtype: int64

现在我正在尝试:

    #Replace missing value

df['Name'].fillna('Mr.', inplace=True)

# Create Column Gender
df['Gender'] = df['Name']

for i in range(0, df[0]):  


    A = df['Name'].values[i][0:3]=="Mr." 
    df['Gender'].values[i] = A

df.loc[df['Gender']==True, 'Gender']="Male"
df.loc[df['Gender']==False, 'Gender']="Female"

del df['Name'] #Delete column 'Name'

df

但是由于出现以下错误,我遗漏了一些东西:

<块引用>

密钥错误:0

1 个答案:

答案 0 :(得分:1)

KeyError 是因为您没有名为 0 的列。但是,我会放弃该代码并尝试更有效的方法。

在使用 np.where 后,您可以将 str.containsMr. 一起使用以搜索带有 fillna() 的名称。然后,只需 drop Name 列。:

df['Name'] = df['Name'].fillna('Mr.')
df['Gender'] = np.where(df['Name'].str.contains('Mr\.'), 'Male', 'Female')
df = df.drop('Name', axis=1)
df

完整示例:

df = pd.DataFrame({'Name': {0: 'Mr. Gordon Hemmings',
  1: 'Miss Jane Wilkins',
  2: 'Mrs. Audrey North',
  3: 'Mrs. Wanda Sharp',
  4: 'Mr. Victor Hemmings'},
 'Value': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1}})
print(df)
df['Name'] = df['Name'].fillna('Mr.')
df['Gender'] = np.where(df['Name'].str.contains('Mr\.'), 'Male', 'Female')
df = df.drop('Name', axis=1)
print('\n')
print(df)
                  Name  Value
0  Mr. Gordon Hemmings      1
1    Miss Jane Wilkins      1
2    Mrs. Audrey North      1
3     Mrs. Wanda Sharp      1
4  Mr. Victor Hemmings      1


   Value  Gender
0      1    Male
1      1  Female
2      1  Female
3      1  Female
4      1    Male