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

pra*_*har 8 python replace pandas

我的数据框中有一个列,其值为'3.456B',实际上代表了3.456亿(和Million相似的表示法).如何将此字符串形式转换为正确的数字表示?

这显示了数据框:

import pandas as pd
data_csv = pd.read_csv('https://biz.yahoo.com/p/csv/422conameu.csv')
data_csv
Run Code Online (Sandbox Code Playgroud)

这是一个示例值:

data_csv['Market Cap'][0]
type(data_csv['Market Cap'][0])
Run Code Online (Sandbox Code Playgroud)

我试过这个:

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
Run Code Online (Sandbox Code Playgroud)

但不幸的是,最后还有值为'M'的值,表示百万.它返回错误如下:

ValueError: invalid literal for float(): 6.46M
Run Code Online (Sandbox Code Playgroud)

如何在此列中用适当的值替换B和M?有没有更好的方法呢?

piR*_*red 5

我会使用字典来替换字符串,然后评估为浮点数。

mapping = dict(K='E3', M='E6', B='E9')

df['Market Cap'] = pd.to_numeric(df['Market Cap'].replace(mapping, regex=True))
Run Code Online (Sandbox Code Playgroud)


ASG*_*SGM 4

假设所有条目末尾都有一个字母,您可以这样做:

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)
Run Code Online (Sandbox Code Playgroud)

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