鑑於這個數據幀:熊貓數據幀部分字符串替換
import pandas as pd
d=pd.DataFrame({'A':['a','b',99],'B':[1,2,'99'],'C':['abcd99',4,5]})
d
A B C
0 a 1 abcd*
1 b 2 4
2 99 99 5
我想要替換所有99S中有星號的整個數據幀。 我已經試過這樣:
d.replace('99','*')
...但它只是在串99的情況下,事先曾在B列
謝謝!
鑑於這個數據幀:熊貓數據幀部分字符串替換
import pandas as pd
d=pd.DataFrame({'A':['a','b',99],'B':[1,2,'99'],'C':['abcd99',4,5]})
d
A B C
0 a 1 abcd*
1 b 2 4
2 99 99 5
我想要替換所有99S中有星號的整個數據幀。 我已經試過這樣:
d.replace('99','*')
...但它只是在串99的情況下,事先曾在B列
謝謝!
問題是在列A值99
和B是不同的類型:
>>> type(d.loc[2,"A"])
<class 'int'>
>>> type(d.loc[2,"B"])
<class 'str'>
您可以通過df.astype()投你數據幀爲字符串類型,然後替換,導致:
>>> d.astype(str).replace("99","*")
A B C
0 a 1 abcd99
1 b 2 4
2 * * 5
編輯:使用正則表達式是其他答案給出的正確解決方案。由於某種原因,我錯過了DataFrame中的abcd *。
這裏會留下這個,以防萬一它對別人有幫助。
如果要更換所有的99
S,嘗試使用正則表達式
>>> d.astype(str).replace('99','*',regex=True)
A B C
0 a 1 abcd*
1 b 2 4
2 * * 5
這將做的工作:
import pandas as pd
d=pd.DataFrame({'A':['a','b',99],'B':[1,2,'99'],'C':['abcd99',4,5]})
d=d.astype(str)
d.replace('99','*',regex=True)
這給
A B C
0 a 1 abcd*
1 b 2 4
2 * * 5
請注意,這會創建一個新的數據框。你也可以做到這一點,而不是就地:
d.replace('99','*',regex=True,inplace=True)