我的数据框中有一列,其值类似于‘3.456B’,实际上代表34.56亿(和百万表示法类似)。如何将此字符串形式转换为正确的数字表示形式?
这显示了数据帧:
import pandas as pd data_csv = pd.read_csv('https://biz.yahoo.com/p/csv/422conameu.csv') data_csv
这是一个样本值:
data_csv['Market Cap'][0] type(data_csv['Market Cap'][0])
我尝试了这个:
data_csv.loc[data_csv['Market Cap'].str.contains('B'), 'Market Cap'] = data_csv['Market Cap'].str.replace('B', '').astype(float).fillna(0.0) data_csv
但不幸的是,最后还有带“ M”的值,表示百万。它返回错误,如下所示:
ValueError: invalid literal for float(): 6.46M
如何在此列中用适当的值替换B和M?有更好的方法吗?
假设所有条目的末尾都有一个字母,则可以执行以下操作:
d = {'K': 1000, 'M': 1000000, 'B': 1000000000} df.loc[:, 'Market Cap'] = pd.to_numeric(df['Market Cap'].str[:-1]) * \ df['Market Cap'].str[-1].replace(d)
这会将除最后一个字符以外的所有内容转换为数字值,然后将其乘以等效于最后一个字符中字母的数字。