【问题标题】:replace every single string value with 0用 0 替换每个字符串值
【发布时间】:2021-11-30 23:01:48
【问题描述】:

给定这个数据框,我想用值 0 替换列中的每个字符串值。 我尝试了这段代码,但数据框不受影响。 我不确定如何更改此行的参数

df['new'].replace(to_replace=r'^$', value=0, regex=True)

这是完整的代码:

l2=['a. 12','b. 75','23', 'sc/a 34', '85', 'a 32', 'b 345']
d = {'col1': []}
df = pd.DataFrame(data=d)
df['col1']=l2

df['new'] = np.where(df["col1"].str.isnumeric(),df["col1"].str[:], (df["col1"].str.extract("^([a-z/]*)", expand=False)) )
print(df['new'])
df['new'].replace(to_replace=r'^$', value=0, regex=True)
print(df['new'])

因此数据框列应具有以下值:

0 0 23 0 85 0 0

【问题讨论】:

  • 这个正则表达式:^$ 将只匹配空字符串。同样直接调用 replace 而不提供 inplace=True 可能不会产生您想要的结果。

标签: python pandas string dataframe


【解决方案1】:

你的正则表达式代表一个空字符串:

字符串的开始 (^) 和结束 ($) 之间没有任何内容。

你应该使用:.*

【讨论】:

    【解决方案2】:

    试试to_replace='^', value=0, regex=True, inplace=True

    即:如果正则表达式匹配,那么它必须是一个字符串,所以用数字0替换。

    参考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html

    PS 如果你想去除非数字字符并且所有数字都是整数,那么这可能就是你想要的:

    df['new'].replace(to_replace=r'\D+', value='', regex=True, inplace=True)
    

    即:在每个值中(示例中的所有值都是字符串)用空字符串替换任何非数字序列。

    【讨论】:

    • 不幸的是,您的解决方案列数据框也保持不变
    • 我之前的回答确实不正确。
    • 我试过了,不行
    • 你试过bla.replace(…inplace=True)bla = bla.replace(…)吗?
    • bla = bla.replace(…) 有效,但它将每个项目都替换为 0,这可能是因为即使是数字也是字符串类型
    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多