如何解决根据另一个单元格中的字符串在 DataFrame 单元格的列表中插入值
我有一个包含三列的 Pandas DataFrame df,其中一列大部分是空的。在第一列中,我列出了一些协议,其中一些协议具有相似的名称。如果协议列中的值以某个字符串开头,我想在空列中插入一个值列表。
示例:
协议 | 别名 |
---|---|
样本协议 | 无 |
协议1 | 无 |
协议2 | 无 |
我想在协议 1 和协议 2 的别名列中插入别名 [同意,协议],如下所示:
协议 | 别名 |
---|---|
样本协议 | 无 |
协议1 | [同意,同意] |
协议2 | [同意,同意] |
我尝试过的:
df.loc[df['Agreement'].str.startswith('Agreement',na = False),'Alias'] = pd.Series([['Agree,agreement']]*df.shape[0])
问题是当我运行检查以查看它是否有效时,我得到一个空的 DataFrame:
df[df['Alias'].str.startswith('Agreement',na = False)]
有什么想法吗?
解决方法
使用带有 ^
的正则表达式来检查字符串开头的模式。
df.loc[df['Agreement'].str.contains('^Agreement'),'Alias'] = [['Agree','Agreement']]
Agreement Alias
0 SampleAgreement None
1 Agreement1 [Agree,Agreement]
2 Agreement2 [Agree,Agreement]
df['Agreement'].str.contains('^Agreement')
0 False
1 True
2 True
Name: Agreement,dtype: bool
,
用于生成列 Alias
的代码已经可以使用所需的输出进行设置:
Agreement Alias
0 SampleAgreement None
1 Agreement1 [Agree,agreement]
2 Agreement2 [Agree,agreement]
您运行检查的代码,即 df[df['Alias'].str.startswith('Agreement',na = False)]
不起作用,原因有两个:1) Alias
列的内容现在是字符串列表(因此带有方括号)而不是比简单的字符串。因此,您不能使用 str.startswith()
来匹配它。 2) Agreement
不匹配 agreement
,因为匹配区分大小写。
如果你不需要它是一个字符串列表,你可以简单地设置如下:
df.loc[df['Agreement'].str.startswith('Agreement',na = False),'Alias'] = 'Agree,agreement'
输出将是:
Agreement Alias
0 SampleAgreement None
1 Agreement1 Agree,agreement
2 Agreement2 Agree,agreement
在这种情况下,您可以使用以下代码进行检查:
import re
df[df['Alias'].str.contains('Agreement',flags=re.IGNORECASE)]
Output:
Agreement Alias
1 Agreement1 Agree,agreement
2 Agreement2 Agree,agreement
这里我们使用 flags=re.IGNORECASE
进行不区分大小写的匹配。我们还使用 str.contains()
代替 str.startswith()
,因为 agreement
不在字符串的开头。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。