当我尝试添加两列时,为什么大熊猫会给出“0.66-0.36”?

时间:2018-05-21 09:11:00

标签: python pandas

我正在尝试使用列名Tangible Book ValueEarnings Per Share进行简单求和:

df['price_asset_EPS'] = (df["Tangible Book Value"]) + (df["Earnings Per Share"])

但是,结果不会评估数字,而且缺少加号,如下所示

0.66-0.36 
1.440.0

我之间错过了什么?

2 个答案:

答案 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。对于每一列,您将拥有其类型。如果您没有看到floatint,则表示这些列可能已作为字符串读入。

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