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

时间:2017-03-30 14:45:04

标签: python pandas replace

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

这显示了数据框:

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?有没有更好的方法呢?

3 个答案:

答案 0 :(得分: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)

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

答案 1 :(得分:3)

我使用字典替换字符串然后评估为float。

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

df['Market Cap'] = pd.to_numeric(df['Market Cap'].replace(mapping, regex=True))

答案 2 :(得分:2)

首先提取单位作为字符串中的最后一个字符。然后将没有单位的值转换为浮点数并在需要时进行乘法运算:

df = pd.DataFrame({'Market Cap':['6.46M','2.25B','0.23B']})
units = df['Market Cap'].str[-1]
df['Market Cap'] = df['Market Cap'].str[:-1].astype(float)
df.loc[units=='M','Market Cap'] *= 0.001
#    Market Cap
# 0     0.00646
# 1     2.25000
# 2     0.23000

现在一切都有数十亿。