python pandas中的str.contains也标记为空白

时间:2017-03-27 21:05:53

标签: python string pandas contains

对于以下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

2 个答案:

答案 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"将给出正确的结果