python pandas 中的 Str.contains 也标记为空白
Posted
技术标签:
【中文标题】python pandas 中的 Str.contains 也标记为空白【英文标题】:Str.contains in python pandas also flags blank 【发布时间】:2017-08-20 18:08:22 【问题描述】:对于以下 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', '')
我需要改用 match 吗?
这是我得到的数据框:
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
【问题讨论】:
请阅读this 以提供可重现的示例。 第二个@juanpa.arrivillaga 的评论。我不明白为什么你的答案不能按原样工作。我们需要查看可以重现问题的示例数据。 还要补充一点,这个人似乎没有在他们自己的项目上投入太多精力,因为他们在过去约 2 小时内就这个 df 提出了 5 个问题。我们很乐意为您提供帮助,但不会为您完成全部任务,您打算如何学习? @DmitryPolonskiy;这不是一个富有成效的评论;我承认我对字符串和正则表达式很陌生,如果我有很多基本问题,我很抱歉;但我正在努力尽快学习它,并且在我的项目上做了很多工作,我在过去 2 小时内问了这么多问题的原因是因为我总结了我遇到的所有障碍,我无法做到在 python 文档或以前的 *** 答案中找到解决方法或解释 @jeangelj,我 can't reproduce it... 【参考方案1】:我无法使用 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
【讨论】:
古玩:为什么要使用正则表达式标记空白列? @juanpa.arrivillaga,我已经在我的回答中添加了解释 - 请检查 对,但他们使用了转义序列,所以应该没关系。 谢谢两位,它一定与原始数据有关。我检查了 python 数据框和原始数据中的字段,它们都是空白的 - 我正在研究一种解决方法,为空白添加 0,所以也许这样标志不会认为它是一个问号【参考方案2】:df['?_Flag'] = np.where(df['Category'].str.contains("\?", na=False), 'Y', '')
"na=False"
会给出正确的结果
【讨论】:
以上是关于python pandas 中的 Str.contains 也标记为空白的主要内容,如果未能解决你的问题,请参考以下文章