对于以下df(请注意,我正在使用的df是从txt文件导入的原始数据中读取的,而不是在此示例中在python中创建的以下df)
import pandas as pd
df = pd.DataFrame({'ID': ['12374' ,'19352','21014','2619','2621','9566','9686','61319','68086','69239','69353', '69373','69491','69535','69582','69691','174572','174637','174646','175286','175390'],
'Category': [' ', ' ', ' ', '???? ?????','? ?',' ','?? ?',' ',' ',' ','?? ?',' ','? ?','???? ????? ??? ','? ?','?? ?','A','A','B','B','C']})
我试图标记,其中用户将类别表示为问号。它确实有效,它标记了带有问号的所有行的标志。但它也将Y标志添加到该列中空白的行。
df['?_Flag'] = np.where(df['Category'].str.contains("\?"), 'Y', '')
我是否需要使用匹配?
这是我得到的数据框:
ID Category ?_Flag
12374 Y
19352 Y
21014 Y
2619 ???? ????? Y
2621 ? ? Y
9566 Y
9686 ?? ? Y
61319 Y
68086 Y
69239 Y
69353 ?? ? Y
69373 Y
69491 ? ? Y
69535 ???? ????? ??? Y
69582 ? ? Y
69691 ?? ? Y
174572 A
174637 A
174646 B
175286 B
175390 C
是否与数据类型有关?
df.info()
First_Name_E 197357 non-null object
答案 0 :(得分:0)
我无法使用Pandas 0.19.2重现您的问题:
In [16]: df['?_Flag'] = np.where(df['Category'].str.contains("\?"), 'Y', '')
In [17]: df
Out[17]:
ID Category ?_Flag
0
1 19352
2 21014
3 2619 ???? ????? Y
4 2621 ? ? Y
5 9566
6 9686 ?? ? Y
7 61319
8 68086
9 69239
10 69353 ?? ? Y
11 69373
12 69491 ? ? Y
13 69535 ???? ????? ??? Y
14 69582 ? ? Y
15 69691 ?? ? Y
16 174572 A
17 174637 A
18 174646 B
19 175286 B
20 175390 C
答案 1 :(得分:0)
df['?_Flag'] = np.where(df['Category'].str.contains("\?", na=False), 'Y', '')
"na=False"
将给出正确的结果