删除 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】:将mask
和contains
与正则表达式一起使用:
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中另一列中的位置给定的字符串列中提取字符[重复]