[英]Facing issue while replacing substring in string in a dataframe using python 3.4.4
我有一個 dataframe df1
列srv_val
。 如果src_val
列中的任何字符串值包含0000000000
,我必須僅用0
替換0000000000
打印 dataframe 中的列值
print(srv_val)
0000000089.56
0000000023.45
0000000000.00
0000000000.89
0000000000.56
0000000000.00
預期的 output:對於包含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'
任何幫助,將不勝感激。 我必須將 dataframe 中該列中的0000000000
替換為0
。
如果他們更好地改變數據類型
df.srv_val.astype('float')
0 89.56
1 23.45
2 0.00
3 0.89
4 0.56
5 0.00
要獲得預期的 output,您可以使用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 沒有屬性 'str'
您嘗試在string
類型 object 上調用str
的代碼中某處出現錯誤。
有很多方法可以做到這一點。
但在我們開始之前,你的價值觀對我來說似乎不是字符串,它們是浮動的,為什么不把它作為你的優勢呢? 它可以加快你的進程。
解決方案1:
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 和 integer 0 [任何大小])
df['srv_val'].str.replace(r'[0]+(?:\.)[0]+', '0')
解決方案 3:(如果您有固定大小的小數來替換小數 0 和 integer 0)
df['srv_val'].str.replace(r'[0]{9}+(?:\.)[0]{2}+', '0')
假設其(9).(2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.