【问题标题】:Replace Whole String if it contains substring in pandas dataframe, but with a list of values如果它包含熊猫数据框中的子字符串,则替换整个字符串,但使用值列表
【发布时间】:2020-02-05 01:53:39
【问题描述】:

有没有办法做下面的问题,但不是使用单个字符串值,而是使用字典/数组在更少的代码行中替换许多值?

Replace whole string if it contains substring in pandas

到目前为止我所拥有的:

key = [
    {
        "substr": ["foo1", "foo2"],
        "new_val": "bar"
    },
]

for i in range(len(key)):
    df.loc[df[column].str.contains('|'.join(key[i]['substr'])), column] = key[i]['new_val']

可以改进吗?

【问题讨论】:

  • @PierreV。有点。这绝对是确定要替换什么的更好方法,但它对替换值没有帮助,具体取决于找到的子字符串。

标签: python pandas


【解决方案1】:

试试:

for el in key:
    df[column]=df[column].str.replace('.*('+ '|'.join(el["substr"]) +').*', el["new_val"], regex=True)

输出(虚拟数据):

import pandas as pd

key = [
    {
        "substr": ["foo1", "foo2"],
        "new_val": "bar"
    }
]

df=pd.DataFrame({"x": ["foo1xyz", "abcfoo", "zyc", "foyo2foo2g"], "y": [1,2,3,4]})

for el in key:
    df["x"]=df["x"].str.replace('.*('+ '|'.join(el["substr"]) +').*', el["new_val"], regex=True)

>> df

        x  y
0     bar  1
1  abcfoo  2
2     zyc  3
3     bar  4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-07
    • 2018-10-01
    • 2022-10-13
    • 2021-11-22
    • 1970-01-01
    • 2018-12-05
    • 2022-07-27
    • 2018-09-24
    相关资源
    最近更新 更多