替换熊猫数据框系列中的每个值[重复]
Posted
技术标签:
【中文标题】替换熊猫数据框系列中的每个值[重复]【英文标题】:Replace every value in a pandas dataframe series [duplicate] 【发布时间】:2020-11-15 18:47:09 【问题描述】:所以我有一个数据框,我想用新字符串替换每个值。
(通常我只会做 df["col1"] = "string",但是我之前需要使用 loc,它会创建一个副本并且不会对序列进行适当的操作)
所以目前我有一个这样的 df
df = pd.DataFrame('A': ['aaaa', 'b', 'c', 'd', 'e'])
当我用替换功能替换它时
df.A.replace(".*","test", regex= True, inplace= True)
我得到了这样的东西
但是我想要的是这样的:
为什么它给了我两次“测试”。我该如何解决?
编辑: 因此,向您展示实际问题是什么。我会给你这个例子,向你展示整个画面。 基本上我有这两个东西
df = pd.DataFrame('A': ['aaaa', 'bbbb', 'c', 'd', 'e'])
replace_list = ["aa","bb"]
现在我希望 df 将列表中存在项目的每个条目替换为列表中的项目。所以 df 看起来像这样:
【问题讨论】:
您的匹配次数介于零次和无限次之间,导致两个位置。一个用于字符 a 等,一个用于紧接其后。这是因为您没有指定起始位置。如果你包含一个起始字符串 ancor 它将很好地工作 是的,大概就是这样。但是开始字符串 ancor 是什么意思? 我的意思是尝试^.*
你可以看到它不起作用。在我原来的 df 我有一个地方列表。但他们中的许多人的名字不正确。如果它们的名称是通用名称的一部分,我想用通用名称替换它们。
@JvdV 如果你提出新的答案,我可以接受
【参考方案1】:
我认为你可以使用
df = pd.DataFrame('A': ['aaaaa', 'b', 'c', 'd', 'e'])
# in case you want to substitute only a generic subset
df.loc[df['A'] == 'b', :] = 'test'
# in case you want the whole column
df['A'] = 'test'
可能正则表达式是一种矫枉过正 =)。
【讨论】:
如果 df 包含类似这样的内容 df = pd.DataFrame('A': ['aaaaaa', 'b', 'c', 'd', 'e'])当我使用“。”时,我会更频繁地得到“测试”。对于正则表达式 所以你想为每个匹配返回'test'或者你有一个特殊的模式匹配?然后给出更多关于你的模式的例子并相应地调整你的问题 我希望“测试”作为每一行的输出,无论之前有什么,正确。我将调整帖子以使其清楚 已编辑,看看是否有帮助 嗯,当您可以用更简单的方式替换列时,我仍然不明白为什么有人会想对任何字符串使用regex
。【参考方案2】:
您的模式匹配多个位置。一个在字符(包括一个字符)之前,一个在字符之后。你可以测试一下here。
如果您包含一个起始字符串 ancor,它将可以匹配任何内容(甚至是空字符串)并替换为 Test
^.*
【讨论】:
以上是关于替换熊猫数据框系列中的每个值[重复]的主要内容,如果未能解决你的问题,请参考以下文章