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?有没有更好的方法呢?
我会使用字典来替换字符串,然后评估为浮点数。
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)
假设所有条目末尾都有一个字母,您可以这样做:
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)
这会将除最后一个字符之外的所有内容转换为数值,然后将其乘以与最后一个字符中的字母等效的数字。
| 归档时间: |
|
| 查看次数: |
949 次 |
| 最近记录: |