我正在下载财务数据,并且有几列包含如下所示的数据点:
34.60B
18.66M
这发生在列号为“ Market Cap”的第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)
答案 0 :(得分:4)
您必须将值迭代为字符串,因为字母会阻止转换为数字类型。然后您可以像这样修剪和缩放:
if value.endswith("M"):
value = float(value[:-1]) * 10**6
elif value.endswith("B"):
value = float(value[:-1]) * 10**9
else:
value = float(value)
由于您使用的是熊猫,因此将其应用于列的最简单方法是将其包装在函数中并使用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)
答案 1 :(得分:0)
假设您已将值提取为字符串,如下所示:
strs = ['34.60B', '18.66M']
那你就可以做
nums = []
for str in strs:
rep = str.replace('B', 'e9')
rep = rep.replace('M', 'e6')
nums.append(float(rep))
然后
>>> nums
[34600000000.0, 18660000.0]