如何识别Pandas系列中的空字符串

时间:2018-03-23 09:59:14

标签: python pandas dataframe

我有一个数据框,如果列'gender'为空,我想用'name'列填充'column3',其他值为'gender'列

vals = {
    'name' : ['n1', 'n2', 'n3', 'n4', 'n5', 'n6', 'n7'],
    'gender' : ['', '', '', 'f',  'f', 'c', 'c'],
    'age' : [39, 12, 27, 13, 36, 29, 10]
}
df4 = pd.DataFrame(vals)
df4['column3'] = df4['name'] if len(df4['gender']) == 0 else df4['gender']

结果是column3只包含取自“gender”的值。 我尝试过以下陈述:

df4['column3'] = np.where(df4['gender'].empty, df4['name'],df4['gender'])
df4['column3'] = df4['name'] if df4['gender'].empty else df4['gender']

相同的结果..所以我认为我的代码无法识别Python Dataframe中的空字符串。我错过了什么?

3 个答案:

答案 0 :(得分:0)

有很多方法,但我觉得以下是最简洁的:

idx = lambda x: x.gender==''
df4.loc[idx, 'column3'] = df4.loc[idx, 'name']
df4.column3= df.column3.fillna(df4.gender)

答案 1 :(得分:0)

我更喜欢单独使用pandas而不是引入numpy:

df4['column3'] = df4[['gender', 'name']].apply(lambda x: x[0] if x[0] else x[1], axis=1)

答案 2 :(得分:-1)

您的numpy.where构造完全可以使用。

您面临的问题是如何测试列与空字符串。答案只是检查与''的平等。

这很容易实现:

df4['column3'] = np.where(df4['gender'] == '', df4['name'], df4['gender'])

pd.Series.empty测试系列是否有 no items ,即没有行,而不是其元素是否为空字符串。

示例

import pandas as pd, numpy as np

vals = {
    'name' : ['n1', 'n2', 'n3', 'n4', 'n5', 'n6', 'n7'],
    'gender' : ['', '', '', 'f',  'f', 'c', 'c'],
    'age' : [39, 12, 27, 13, 36, 29, 10]
}
df4 = pd.DataFrame(vals)

df4['column3'] = np.where(df4['gender'] == '', df4['name'], df4['gender'])

#    age gender name column3
# 0   39          n1      n1
# 1   12          n2      n2
# 2   27          n3      n3
# 3   13      f   n4       f
# 4   36      f   n5       f
# 5   29      c   n6       c
# 6   10      c   n7       c