给定此数据框,我想将列中的每个字符串值替换为值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'])
所以dataframe列应该有以下值:
0 0 0 23 0 85 0 0
试试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)
即:在每个值中(示例中的所有值都是字符串),用空字符串替换任何非数字序列。
你的正则表达式表示一个空字符串:
字符串的start(^)和end($)之间没有任何内容
你应该使用:.*