问题描述

在读取excel表格的数据进行计算和二次函数拟合的时候,发生的错误。

错误提示如下:

TypeError: can't multiply sequence by non-int of type 'float'

由于是很大的表格,经过分析发现有一列的数据类型不是float,而是object:

分析出错原因

查找出错数据:

data_coal.info()

data_coal.select_dtypes(exclude=['float'])

data_coal["修正后负荷(MW)"].dtype

dtype('O')中的O代表object

pandas中的某一列如data_coal["修正后负荷(MW)"]是一个series类型,没有找到series里直接判断不同数据类型的现成方法或函数。

解决办法:

自己用python的type功能和pandas的series自带功能写了一个小循环解决此问题:

1、找到坏数据

for i in range(data_coal["修正后负荷(MW)"].size):

if data_coal["修正后负荷(MW)"].str.isnumeric()[i] == False:

print(i)

##################################################################

for i in range(data_coal["修正后负荷(MW)"].size):

if type(data_coal["修正后负荷(MW)"][i]) != float:

print(i)

print(type(data_coal["修正后负荷(MW)"][i]))

2、修改坏数据

# 用正则表达式进行修改

import re

string = data_coal['修正后负荷(MW)'][16]

string1=re.sub('\s','',string) #将string中的所有空白字符删除

data_coal['修正后负荷(MW)'][16] = float(string1)

给自己的教训:

1、养成观察数据的习惯,如果我一开始就用info函数观察数据的类型,就不会导致我后来出错时一头雾水,因为程序中用到了很多数据,jupyter实在也不方便调试,走了弯路。还以为是自己的程序逻辑出错。

2、调试程序的过程中,察觉到是数据的问题,希望直接在excel中找到错误数据,发现excel一个很坑的点,就是sum函数竟然不报错,会直接跳过不为数值的数据。(当然这种方法在数据量很大的情况并不适合)

series用法

str.isnumeric()的用法

参考

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐