我有一个名为'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)
但这会替换列中的所有条目,包括以大写字母开头的条目。你能告诉解决方案吗?
答案 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]