python读取excel数字数据是object类型_pandas 读取excel表格的数据,数据格式从float莫名变object,导致计算失败...
问题描述在读取excel表格的数据进行计算和二次函数拟合的时候,发生的错误。错误提示如下:TypeError: can't multiply sequence by non-int of type 'float'由于是很大的表格,经过分析发现有一列的数据类型不是float,而是object:分析出错原因查找出错数据:data_coal.info()data_coal.select_dtypes(e
问题描述
在读取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()的用法
参考
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)