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

2024-06-17 13:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧df1,它有srv_val列。如果src_val列中的任何字符串值包含0000000000,我必须仅用0替换0000000000

在dataframe中打印列值

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


2条回答

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

但在我们开始之前,我觉得你们的值不是字符串,它们是浮动的,为什么不把它作为你们的优势呢?它可以加快你的进程

解决方案1:

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

如果我上面的假设是错误的,你必须用regex来做,这里还有另外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)

如果它们的编号更好,请更改数据类型

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和regEx 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'

错误,因为您试图在代码中的某个地方调用str类型对象上的string

相关问题 更多 >