2017-08-02 59 views
1

我有一個叫做「XLK」 DF:在數據幀將字符轉換成數值

 Market Cap PE 
AAN  3.25B  23.6 
AAPL 819.30B 18.44  
ACFN 6.18M  2.1 
ACIW 2.63B  103.15 

我只是想爲值> 1億的市值,因此預計產量:

 Market Cap PE 
AAN  3.25B  23.6 
AAPL 819.30B 18.44  
ACIW 2.63B  103.15 

我試過沒有成功轉換的字母到適當的0:

XLK['Market Cap'].replace('M','000000') 
XLK.drop[XLK_quote['Market Cap'] < '100M'].index 
+0

你會看那個...完全相同的副本。 –

回答

5

使用replaceregex=True並使用模擬科學記數法的替換字符串。然後使用astype(float)pd.to_numeric

df[df.Market_Cap.replace(dict(B='E9', M='E6'), regex=True).astype(float) >= 100E6] 

    Market_Cap  PE 
AAN  3.25B 23.60 
AAPL 819.30B 18.44 
ACIW  2.63B 103.15 

等價

dct = dict(B='E9', M='E6') 
num = pd.to_numeric(df.Market_Cap.replace(dct, regex=True), 'coerce') 
df[num >= 100E6] 
+0

我得到ValueError:無法將字符串轉換爲浮點數:N/A ....有沒有辦法忽略Nan值? –

+0

在df中有500行,猜猜它們是哪一個不適用 –

+0

我使用'pd.to_numeric'更新了第二個版本,以包含一個參數設置,它強制它無法解析爲'np.nan'。它現在應該使用「NA」。 – piRSquared

2

另外,指定mapping,然後用str.map替代:

In [723]: mapping 
Out[723]: {'B': 1000000000, 'K': 1000, 'M': 1000000} 

In [724]: df[df['Market Cap'].str[:-1].astype(float) * df['Market Cap'].str[-1].map(mapping) > 100e6] 
Out[724]: 
    Market Cap  PE 
AAN  3.25B 23.60 
AAPL 819.30B 18.44 
ACIW  2.63B 103.15