2017-08-02 40 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