簡體   English   中英

使用 python 3.4.4 在 dataframe 中替換字符串中的 substring 時面臨問題

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

我有一個 dataframe df1srv_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM