使用 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)
我有一个包含列 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)