【问题标题】:Replace a character in a Python DataFrame column替换 Python DataFrame 列中的字符
【发布时间】:2023-03-05 16:20:02
【问题描述】:

下面显示的简单数据框replace 不起作用。
NewPhone 列包含与原始列相同的值。

import pandas as pd
SF = pd.read_csv(r"xxx.csv")
SF['NewPhone'] = SF['Phone'].replace("(",'xxx')
print(SF['NewPhone'])

【问题讨论】:

  • 如果任何一个答案解决了您的问题,那么通常的形式是接受最合适的答案,答案的左上角会有一个空的勾号。请注意,您只能接受一个答案。这样做的原因是问题不会一直没有答案

标签: python pandas dataframe replace


【解决方案1】:

replace 查找完全匹配(默认情况下,除非您传递 regex=True,但您需要转义括号 - 请参阅 @piRSquared 的答案),您想要 str.replace

SF['NewPhone'] = SF['Phone'].str.replace("(",'xxx')

它将用新字符串替换所有出现的传入字符串

例子:

In[20]:
df = pd.DataFrame({'phone':['(999)-63266654']})
df

Out[20]: 
            phone
0  (999)-63266654

In[21]:    
df['phone'].str.replace("(",'xxx')

Out[21]: 
0    xxx999)-63266654
Name: phone, dtype: object

如果我们尝试replace,则不会发生匹配:

In[22]:
df['phone'].replace("(",'xxx')

Out[22]: 
0    (999)-63266654
Name: phone, dtype: object

请参阅@piRSquared 的回答,了解如何让replace 按预期工作(我不想蚕食他的回答)

【讨论】:

    【解决方案2】:

    Series.replace 方法采用 regex 参数,默认情况下为 False。将其设置为True。此外,如果要替换的字符串被解释为正则表达式模式,我们需要转义左括号。

    df.phone.replace("\(", 'xxx', regex=True)
    
    0    xxx999)-63266654
    Name: phone, dtype: object
    

    来自@EdChum 的设置

    df = pd.DataFrame({'phone':['(999)-63266654']})
    

    【讨论】:

    • 忘记了regex arg for replace +1
    • 我仍然认为我更喜欢你的回答。但是提醒人们这个选项是件好事。它也可用于DataFrame 变体。
    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 2010-10-20
    • 2021-09-12
    • 1970-01-01
    • 2013-06-13
    • 2019-02-26
    • 2013-06-20
    • 2017-06-24
    相关资源
    最近更新 更多