python - 找到“M”并将数字乘以 100 万,然后找到“B”并将数字乘以 10 亿
问题描述
我正在下载财务数据,我有几列数据点如下所示:
34.60B
18.66M
这发生在第 6 列中,其标题为“市值”。它也出现在第 41 列中,该列有一个名为“Avg Volume”的标题。如何找到带有“M”的单元格并将这些值乘以一百万,同样地,找到带有“B”的单元格并将这些值乘以十亿,最后将带有“K”的值乘以一千?我正在尝试将所有内容都转换为数字,因此我没有将文本和数字混合在一起。
这是我所指的数据示例:
Industry Country Market Cap P/E PEG
0 Medical Laboratories & Research USA 22.29B 19.94 1.88
1 Aluminum USA 4.07B 0.00 0.00
2 Exchange Traded Fund USA 0 0.00 0.00
3 Asset Management USA 34.60B 0.00 0.00
4 Specialized Health Services USA 18.66M 0.00 0.00
5 Exchange Traded Fund USA 0 0.00 0.00
6 Major Airlines USA 14.96B 10.83 0.75
这是我正在使用的代码。
import pandas as pd
from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
# load data
df = pd.read_csv('C:\\path_here\\stocks.csv')
print(df)
for index, row in df.head(n=2).iterrows():
print(index, row)
解决方案
您必须将值作为字符串进行迭代,因为字母会阻止转换为数字类型。然后你可以像这样修剪和缩放:
if value.endswith("M"):
value = float(value[:-1]) * 10**6
elif value.endswith("B"):
value = float(value[:-1]) * 10**9
else:
value = float(value)
由于您使用的是 pandas,因此将其应用于列的最简单方法是将其包装在一个函数中并使用 ehm, apply
:
def convert_scale(value):
if value.endswith("M"):
return float(value[:-1]) * 10**6
elif value.endswith("B"):
return float(value[:-1]) * 10**9
else:
return float(value)
df["PEG"] = df["PEG"].apply(convert_scale)
df["Avg Volume"] = df["Avg Volume"].apply(convert_scale)
推荐阅读
- c++ - 使用移动构造函数放置新的位置与愚蠢的 small_vector 中的移动分配
- javascript - 如何从不同的js文件导入变量?
- javascript - 用颜色填充 D3 箭头
- java - 继承[Java]中类型转换和向上/向下转换之间的区别?
- math - 如何将此循环转换为原始数学
- python - How does the following expression work in python?
- javascript - 我需要在threejs中将对象彼此分开我找到了一个教程但他使用了meshX = -10并且它不起作用
- sql-server - 使用 MacOS 终端连接到 SQL Server 时登录失败
- mingw - 如何检查我的程序是否在 MinGW(或 MSYS)shell 或 CMD 上运行?
- jvm - 为什么我们不能像 VMWare、KVM、Docker 等一样将 JVM 发展为硬件虚拟化技术?