首页 > 编程 > Python > 正文

对python .txt文件读取及数据处理方法总结

2020-02-22 23:48:52
字体:
来源:转载
供稿:网友

1、处理包含数据的文件

最近利用Python读取txt文件时遇到了一个小问题,就是在计算两个np.narray()类型的数组时,出现了以下错误:

TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U3') dtype('<U3') dtype('<U3')

作为一个Python新手,遇到这个问题后花费了挺多时间,在网上找了许多大神们写的例子,最后终于解决了。

总结如下:

(1)出现此问题的原因是:目的是想计算两个数组间的差值,但数组中的元素不是数据类型(float或int等),而是str类型的。

(2)解决方法:在为空数组添加数据过程中,将每个数据强制转化为float型。

如将“character.append(dataSet[i][:-1])”修改为“ character.append([float(tk) for tk in dataSet[i][:-1]])”

现将利用Python读取txt文件的过程总结如下:

python版本为python3.6

(1)函数定义,存放于Function.py文件中:

from numpy import *import random#读取数据函数,返回list类型的训练数据集和测试数据集def loadData(fileName):  trainingData=[] testData=[] with open(fileName) as txtData: lines=txtData.readlines() for line in lines:  lineData=line.strip().split(',') #去除空白和逗号“,”  if random.random()<0.7:  #数据集分割比例  trainingData.append(lineData) #训练数据集  else:  testData.append(lineData) #测试数据集 return trainingData,testData#输入数据为list类型,分割数据集,分割为特征和标签两部分,返回数据为np.narray类型def splitData(dataSet):  character=[] label=[] for i in range(len(dataSet)): character.append([float(tk) for tk in dataSet[i][:-1]]) label.append(dataSet[i][-1]) return array(character),array(label)

(2)实现两个数组间的减法,存放于main.py文件中:

#__author__=='qustl_000'#-*- coding: utf-8 -*-import numpy as npimport FunctionfileName="1.txt"trainingData,testData=Function.loadData(fileName)trainingCharacter,trainingLabel=Function.splitData(trainingData)testCharacter,testLabel=Function.splitData(testData)diff1=np.tile(testCharacter[0],(len(trainingCharacter),1))-trainingCharacterprint('测试数据集的一条数据,扩充到与训练数据集同维:')print(np.tile(testCharacter[0],(len(trainingCharacter),1)))print('训练数据集:')print(trainingCharacter)print('作差后的结果:')print(diff1)

(3)运行结果:

测试数据集的一条数据,扩充到与训练数据集同维:[[ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ]]训练数据集:[[ 1.5 40. ] [ 1.5 50. ] [ 1.6 40. ] [ 1.6 50. ] [ 1.6 60. ] [ 1.6 70. ] [ 1.7 60. ] [ 1.7 70. ] [ 1.7 80. ] [ 1.8 60. ] [ 1.8 80. ] [ 1.8 90. ] [ 1.9 90. ]]作差后的结果:[[ 0. 20. ] [ 0. 10. ] [ -0.1 20. ] [ -0.1 10. ] [ -0.1 0. ] [ -0.1 -10. ] [ -0.2 0. ] [ -0.2 -10. ] [ -0.2 -20. ] [ -0.3 0. ] [ -0.3 -20. ] [ -0.3 -30. ] [ -0.4 -30. ]]            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表