我有一个名为' 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)
将replace
与regex=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]
答案 1 :(得分: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