-:'str'和'int'的不受支持的操作数类型

时间:2018-09-26 20:41:36

标签: python pandas

我知道这篇文章无法复制,因为数据是我在本地读取的CSV格式,但是如果有用,我可以将数据发布到github帐户。我试图先找到相关性:

ng = pd.read_csv('C:/Users/me/Desktop/ngDataBaseline.csv', index_col='Date', parse_dates=True)
ng.head()

这将返回两列:

    HDD Therm
Date        
2011-05-01  347 3,506
2011-06-01  74  1,237
2011-07-01  0   139
2011-08-01  0   35
2011-09-01  154 170

但是,如果我这样做: ng['HDD'].corr(ng['Therm'])

我收到关于unsupported operand type(s) for /: 'str' and 'int'的错误

对我来说这没有意义,因为我认为这全都是熊猫系列。

如果我执行print(type(ng['HDD'])),Ipython将输出<class 'pandas.core.series.Series'>

print(type(ng['Therm']))一样,为什么我不能关联数据?

1 个答案:

答案 0 :(得分:4)

问题在于,由于逗号的原因,Therm列被读取为字符串。幸运的是,read_csv有一个decimal参数可以解决这个问题。使用:

ng = pd.read_csv('C:/Users/me/Desktop/ngDataBaseline.csv', decimal=',', index_col='Date', parse_dates=True)

>>> ng
         Date  HDD    Therm
0  2011-05-01  347    3.506
1  2011-06-01   74    1.237
2  2011-07-01    0  139.000
3  2011-08-01    0   35.000
4  2011-09-01  154  170.000

然后,您的corr可以工作:

>>> ng['HDD'].corr(ng['Therm'])
-0.275450033528333

如果逗号是千位分隔符,请使用参数thousands

ng = pd.read_csv('C:/Users/me/Desktop/ngDataBaseline.csv', thousands=',', index_col='Date', parse_dates=True)

>>> ng
         Date  HDD  Therm
0  2011-05-01  347   3506
1  2011-06-01   74   1237
2  2011-07-01    0    139
3  2011-08-01    0     35
4  2011-09-01  154    170

>>> ng['HDD'].corr(ng['Therm'])
0.8794452911190037