Skip to main content
 首页 » 编程设计

python之用 `and` 条件替换 pandas 列中的部分字符串

2025年05月04日22dflying

我有一个看起来像这样的 pandas dataframe:

    Size    Measure     Location    Messages 
    Small     1         Washington  TXT0123 TXT0875 TXT874 TXT0867 TXT0875 TXT0874 
    Medium    2         California  TXT020 TXT017 TXT120 TXT012 
    Large     3         Texas       TXT0123 TXT0123 TXT0123 TXT0123 TXT0217 TXT0206 
    Small     4         California  TXT020 TXT0217 TXT006 
    Tiny      5         Nevada      TXT0206 TXT0217 TXT0206 

如果长度等于 7 且第四个字符为 0,我将尝试从 Messages 列中的单个单词中删除 0。

我试过 for 循环,但它删除了所有 0:

for line in df.Messages: 
    for message in line.split(): 
        if len(message) == 7 and message[3] == '0': 
            print(message.replace('0', '')) 

我还尝试了 .map ,这给了我一些错误:

df.Messages = df.Messages.map(lambda x: x.replace('0', '') for message in line.split() for line in df.Messages if (len(message) == 7 and message[3] == '0')) 
 
TypeError: 'generator' object is not callable 

有没有办法使用包含 if 和 and 条件的 .map 来做到这一点?

请您参考如下方法:

鉴于您希望对每个单词执行此操作,首先使用 str.split 拆分您的列,调用 apply,然后使用 str 重新加入。加入:

def f(l): 
    return [w.replace('0', '') if len(w) == 7 and w[3] == '0' else w for w in l] 
 
df.Messages.str.split().apply(f).str.join(' ') 
 
0    TXT123 TXT875 TXT874 TXT867 TXT875 TXT874 
1                  TXT020 TXT017 TXT120 TXT012 
2     TXT123 TXT123 TXT123 TXT123 TXT217 TXT26 
3                         TXT020 TXT217 TXT006 
4                           TXT26 TXT217 TXT26 
Name: Messages, dtype: object 

如果您只想替换单个 0(而不是全部),请在函数 f 中使用 w.replace('0', '', 1) > 相反。