Учитывая небольшой набор данных следующим образом:
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}$')
Последний набор отсутствующих значений по маске в DataFrame.loc:
df.loc[mask, 'name'] = np.nan
Или в Series.mask:
df['name'] = df['name'].mask(mask)
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
df['name'] = df['name'].mask(df['name'].str.len() == 1)