删除 Pandas 中字符串列中的 Dash/Dots 并将其替换为 Null

Posted

技术标签:

【中文标题】删除 Pandas 中字符串列中的 Dash/Dots 并将其替换为 Null【英文标题】:Removal of Dash/Dots in a string column in pandas and replace it with Null 【发布时间】:2018-11-17 11:10:04 【问题描述】:

我有以下数据框。其中列“col1”是一个字符串列,由文本、特殊字符、破折号、圆点和日期组成。

我想替换col1包含破折号和/或圆点的所有条目。它们应替换为单词null。请注意col1 中的日期也包含破折号或圆点。这些我不想替换。

** 输入:**

col1 

----
-
---
02-05-2018 meet with bm sir and service manager 
02-05-2018 meet with xyz sir for HA 
02-05-2018 meet with pqr sir for PAI 
04-12-2107
-
.
...
03.08.2018

期望的输出:

Col1

null
null
null
02-05-2018 meet with bm sir and service manager 
02-05-2018 meet with xyz sir for HA 
02-05-2018 meet with pqr sir for PAI 
04-12-2107
null
null
null
03.08.2018

【问题讨论】:

我已经清楚地提出了这个问题并给出了相关的例子。 @Scott Boston 也提出了解决方案,不幸的是它不起作用。 解决方案很难找到,并不能说明它是无用的。请询问我是否不清楚,而不是在没有提供解决方案的情况下简单地标记它。 【参考方案1】:

maskcontains 与正则表达式一起使用:

df.mask(df.col1.str.contains(r'^[\.|\-]'))

输出:

                                              col1
0                                              NaN
1                                              NaN
2                                              NaN
3  02-05-2018 meet with bm sir and service manager
4              02-05-2018 meet with xyz sir for HA
5             02-05-2018 meet with pqr sir for PAI
6                                       04-12-2107
7                                              NaN
8                                              NaN
9                                              NaN

使用附加列更新以显示更改。

df['col11'] = df.mask(df.col1.str.contains(r'^[\.|\-]'))

print(df)

输出:

                                               col1                                            col11
0                                              ----                                              NaN
1                                                 -                                              NaN
2                                               ---                                              NaN
3   02-05-2018 meet with bm sir and service manager  02-05-2018 meet with bm sir and service manager
4               02-05-2018 meet with xyz sir for HA              02-05-2018 meet with xyz sir for HA
5              02-05-2018 meet with pqr sir for PAI             02-05-2018 meet with pqr sir for PAI
6                                        04-12-2107                                       04-12-2107
7                                                 -                                              NaN
8                                                 .                                              NaN
9                                               ...                                              NaN
10                                       03.08.2018                                       03.08.2018

【讨论】:

谢谢,我不知道是谁投了反对票。我尝试了代码,它不起作用。它用数字代替 用数字代替???此语句中没有替换,这里我们掩盖了 contains 返回 True 的位置。并且,如果 . 以外的任何字符,包含返回 true。或 - 存在于字符串中。 它基本上替换了我的数据框中“第一列”中的值,即数字。下面是我执行的代码 df['bn_note_text'] = df.mask(df.bn_note_text.str.contains(r'^[\.|\-]')) bn_note_text 是我需要应用正则表达式的列名跨度> 好吧,我很困惑。在语句之前打印 df.head(10) 运行您在此处的语句并在语句之后打印 df.head(10)。 df['bn_note_text'].head() 输出[757]:0 63889 1 15351 2 15351 3 15351 4 34237【参考方案2】:

使用/^[-.]+$/gm 仅匹配包含 .或 -

如果你想保留只包含点和破折号的线条,你可以使用/^([-.])\1*$/gm

【讨论】:

以上是关于删除 Pandas 中字符串列中的 Dash/Dots 并将其替换为 Null的主要内容,如果未能解决你的问题,请参考以下文章

从pandas DataFrame中另一列中的位置给定的字符串列中提取字符[重复]

如何替换 Pandas 数据框的字符串列中的文本?

Pandas - 检查列表列中的字符串列是不是按行排列

Python pandas 使用附加字符串列汇总数据框中的往返数据 [关闭]

从 Pandas DF 的字符串列中提取数字

如何删除/替换字符串列中的一系列特殊字符? [关闭]