一尘不染

如何在Python中将表示为字符的数字转换为数字

python

我的数据框中有一列,其值类似于‘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?有更好的方法吗?


阅读 216

收藏
2021-01-20

共1个答案

一尘不染

假设所有条目的末尾都有一个字母,则可以执行以下操作:

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)

这会将除最后一个字符以外的所有内容转换为数字值,然后将其乘以等效于最后一个字符中字母的数字。

2021-01-20