使用 python 3.4.4 替换数据框中字符串中的子字符串时遇到问题

Facing issue while replacing substring in string in a dataframe using python 3.4.4

我有一个包含列 srv_val 的数据框 df1。如果 src_val 列中的任何字符串值包含 0000000000

,我必须仅用 0 替换 0000000000

打印数据框中的列值

print(srv_val)

0000000089.56
0000000023.45
0000000000.00
0000000000.89
0000000000.56
0000000000.00

预期输出:对于包含 0000000000

的那些值,必须将 0000000000 替换为 0
print(src_val)
0000000089.56
0000000023.45
0.00
0.89
0.56
0.00

我尝试的解决方案:

如果 0000000000 找到但出现编译错误,则尝试删除前导 9 个零

df1['srv_val'] = df1['srv_val'].apply(lambda x:np.nan if pandas.isnull(x) else (x[9:] if "0000000000" in x))

df1['srv_val'] = df1['srv_val'].apply(lambda x:np.nan if pandas.isnull(x) else (x[9:] if x.str.contains("0000000000")))

错误:

'str' object has no attribute 'str'

如有任何帮助,我们将不胜感激。我必须在数据框中的该列中用 0 替换 0000000000

如果他们编号更好,可以更改数据类型

df.srv_val.astype('float')
0    89.56
1    23.45
2     0.00
3     0.89
4     0.56
5     0.00

要获得预期的输出,您可以使用 str.replace 和正则表达式 0{9} 将九个零替换为空字符串 ''

df.srv_val.str.replace('0{9}','')
0    0000000089.56
1    0000000023.45
2             0.00
3             0.89
4             0.56
5             0.00

你得到了

'str' object has no attribute 'str'

您尝试在 string 类型对象上调用 str 代码中的某处出错。

有很多方法可以做到这一点。

但在我们开始之前,您的值对我来说似乎不是字符串,它们是浮动的,为什么不利用它作为您的优势呢?它可以加快您的进程。

解决方案一:

df.loc[df['srv_val'].astype(float) == 0,'srv_val'] = "0"

如果我上面的假设是错误的,那么你必须用正则表达式来做,这里有另外 3 个解决方案。但我要你记住,字符串替换比浮点数更昂贵。

解决方案 2:(如果您只想替换小数 0 [任意大小])

df['srv_val'].str.replace(r'[0]+\.[0]+', '0')

解决方案 3:(如果您想同时替换小数 0 和整数 0 [任意大小])

df['srv_val'].str.replace(r'[0]+(?:\.)[0]+', '0')

解决方案 3:(如果您有固定大小的小数来替换小数 0 和整数 0)

df['srv_val'].str.replace(r'[0]{9}+(?:\.)[0]{2}+', '0')

假设其 (9).(2)