Pandas:用None替换列中小写的所有字符串

时间:2018-05-31 22:59:29

标签: python string pandas replace

我有一个名为'names'的列的数据集,其中包含非名称的字符串。这些都是用小写

编写的
df = pd.DataFrame({'names': ['Chris Z', 'Hulk Hogan', 'notaname',
                             'whateven']})

预期产出:

     names
0    Chris Z
1    Hulk Hogan
2    NaN
3    NaN
Name: names, dtype: object

我想用NaN替换它们,我试过这个:

df['names'] = df['names'].replace(r'[a-z]{2}', None, inplace=True, regex=True)

但这会替换列中的所有条目,包括以大写字母开头的条目。你能告诉解决方案吗?

2 个答案:

答案 0 :(得分:3)

如果没有正则表达式,您可以将系列与自身的小写版本进行比较:

df.loc[df['names'] == df['names'].str.lower(), 'names'] = np.nan

print(df['names'])

0       Chris Z
1    Hulk Hogan
2           NaN
3           NaN
Name: names, dtype: object

答案 1 :(得分:2)

^[a-z]+$ df = pd.DataFrame({'names': ['Chris Z', 'Hulk Hogan', 'notaname', 'whateven']}) df.names.mask(df.names.str.match(r'^[a-z]+$')) 0 Chris Z 1 Hulk Hogan 2 NaN 3 NaN Name: names, dtype: object 一起用作正则表达式:

^[a-z\s]+$

如果某些小写字符串中有空格,请改用 ^ # Asserts position at beginning of string [ a-z # Matches any lowercase character 1 or more times ]+ $ # Asserts position at end of string

$('#top > div')[1]