我正在尝试使用列名Tangible Book Value
和Earnings Per Share
进行简单求和:
df['price_asset_EPS'] = (df["Tangible Book Value"]) + (df["Earnings Per Share"])
但是,结果不会评估数字,而且缺少加号,如下所示
0.66-0.36
1.440.0
我之间错过了什么?
答案 0 :(得分:2)
看起来两列都是字符串(不是浮点数):
0.66-0.36
1.440.0
了解这些列上的'+'如何进行字符串连接而不是添加?它连接“0.66”和“-0.36”,然后是“1.44”和“0.0”。
至于为什么这些列是不浮动的字符串,请查看pandas.read_csv
给出的dtype。这里有许多重复的问题,告诉您如何为read_csv指定正确的dtypes。
答案 1 :(得分:0)
您的列不会被视为数字而是字符串。尝试运行df.dtypes
。对于每一列,您将拥有其类型。如果您没有看到float
或int
,则表示这些列可能已作为字符串读入。
import pandas as pd
dff = pd.DataFrame([[1,'a'], [2, 'b']])
dff.dtypes
0 int64
1 object
下面我创建了一个数字框,其数字在引号内。看看dtypes
。
dff = pd.DataFrame([['1','a'], ['2', 'b']])
dff.dtypes
0 object
1 object
您可以在此处看到,由于引号,数字列未标记为int
/ float
。现在,如果我拿第一列的总和
dff.iloc[:,0].sum()
'12'
我得到'12'
,这与你的情况相同。要将这些列转换为数字,请查看pd.to_numeric
dff.iloc[:,0] = pd.to_numeric(dff.iloc[:,0], errors='ignore')
dff.iloc[:,0].sum()
3