我在熊貓一個數據幀,其中列中的一個(即列「B」)中包含$符號的字符串:如何過濾行基於
import numpy as np
import pandas as pd
df = pd.DataFrame({'a': [51, 2,32,99,81], 'b': ['$3', '$4','$-','$0','$23']})
我要過濾的數據幀,這樣我只保留column'b'只返回除零以外的整數的行,$符號將被丟棄。
我所需的輸出是:
歡迎任何的反饋。
我在熊貓一個數據幀,其中列中的一個(即列「B」)中包含$符號的字符串:如何過濾行基於
import numpy as np
import pandas as pd
df = pd.DataFrame({'a': [51, 2,32,99,81], 'b': ['$3', '$4','$-','$0','$23']})
我要過濾的數據幀,這樣我只保留column'b'只返回除零以外的整數的行,$符號將被丟棄。
我所需的輸出是:
歡迎任何的反饋。
In [64]: df = pd.DataFrame({'a': [51, 2,32,99,81], 'b': ['$3', '$4','$-','$0','$23']})
In [65]: df['b'] = pd.to_numeric(df['b'].str.replace(r'\D+', ''), errors='coerce')
In [67]: df
Out[67]:
a b
0 51 3.0
1 2 4.0
2 32 NaN
3 99 0.0
4 81 23.0
In [68]: df = df[df['b'].notnull() & df['b'].ne(0)]
In [69]: df
Out[69]:
a b
0 51 3.0
1 2 4.0
4 81 23.0
我們也可以過濾這種方式:
同樣,使用pd.to_numeric
(假設你的數據在整個有這種相同的結構)。
df.b = pd.to_numeric(df.b.str[1:], errors='coerce')
print(df)
a b
0 51 3.0
1 2 4.0
2 32 NaN
3 99 0.0
4 81 23.0
print (df.dropna(subset=['b']))
a b
0 51 3.0
1 2 4.0
3 99 0.0
4 81 23.0
如果您想篩選出既NaN
S和零點,使用:
print (df[df.b.notnull() & df.b.ne(0)])
a b
0 51 3.0
1 2 4.0
4 81 23.0
df.b=pd.to_numeric(df['b'].str.replace('$', ''),errors='coerce')
df
Out[603]:
a b
0 51 3.0
1 2 4.0
2 32 NaN
3 99 0.0
4 81 23.0
df.loc[(df.b.notnull())&(df.b!=0),:]
Out[604]:
a b
0 51 3.0
1 2 4.0
4 81 23.0