Python 仅将熊猫中的一个汉字行替换为NaN

Python 仅将熊猫中的一个汉字行替换为NaN,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,给定一个小数据集,如下所示: id name 0 1 你 1 2 你好 2 3 你好吗? 3 4 好 4 5 hello 5 6 how are you? 6 7 how 如果名称列只包含一个字符,我想用NaN替换它的中文字符 预期结果如下: id name 0 1 N

给定一个小数据集,如下所示:

   id          name
0   1             你
1   2            你好
2   3          你好吗?
3   4             好
4   5         hello
5   6  how are you?
6   7           how
如果名称列只包含一个字符,我想用
NaN
替换它的中文字符

预期结果如下:

   id          name
0   1            NaN
1   2            你好
2   3          你好吗?
3   4            NaN
4   5         hello
5   6  how are you?
6   7           how

我怎么能在熊猫身上做到呢?谢谢。

为测试长度创建掩码,如果存在汉字:

mask = df['name'].str.len().eq(1) & df['name'].str.contains(r'[\u4e00-\u9fff]')
mask = df['name'].str.contains(r'^[\u4e00-\u9fff]{1}$')
或者您只能使用正则表达式测试一个汉字:

mask = df['name'].str.len().eq(1) & df['name'].str.contains(r'[\u4e00-\u9fff]')
mask = df['name'].str.contains(r'^[\u4e00-\u9fff]{1}$')
按掩码最后设置的缺失值位于:

或在:



df['name']=df['name'].mask(df['name'].str.len()==1)
print (df)
   id          name
0   1           NaN
1   2            你好
2   3          你好吗?
3   4           NaN
4   5         hello
5   6  how are you?
6   7           how