2017-10-19 111 views
1

我在熊貓一個數據幀,其中列中的一個(即列「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'只返回除零以外的整數的行,$符號將被丟棄。

我所需的輸出是:

enter image description here

歡迎任何的反饋。

回答

6
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 

我們也可以過濾這種方式:

​​
4

同樣,使用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 
4
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