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 也标记为空白的主要内容,如果未能解决你的问题,请参考以下文章

python中利用pandas怎么处理缺省值

Python中的结构化数据分析利器-Pandas简介

Python Pandas 中的引擎 read_csv

Python 中的 InfluxDB 和 pandas 错误

python / pandas中的条件聚合

python 替换Pandas中的缺失值(NaN)(Python)