利用pandas读取wincc导出csv数据的总结

1 前言

要进行数据处理,需要将wincc的生产数据导出,导出之后发现csv文件非常大。查看之后,时间序列和数据列在一个文件格中,分隔符有空格和:因此考虑用pandas导入数据。

2 准备工作

导出的数据不能直接应用,还是需要进行预处理。因此对数据进行简单的替换,将所有的空格替换成“;”,另外将不合理的数据进行替换;

3 读取代码示例

导出的数据一般有好几万行,因此需要对数据进行分次读取,读取完毕之后再处理。
代码如下:

import pandas as pd
import chardet
##获取文件编码类型
def get_encoding(file):
  # 二进制方式读取,获取字节数据,检测类型
    with open(file, 'rb') as f:
   return chardet.detect(f.read())['encoding']
 encod = get_encoding('E:\Softwarestudy\cdqdata\A_14101_3011.csv')
encod
##'UTF-16'  #发现wincc导出的csv文件为utf16型,因此读取数据代码如下:
data=pd.read_csv(r"E:\Softwarestudy\cdqdata\A_14101_3011.csv", header=None, sep=';',index_col=0,encoding='utf16',engine='python',nrows=500)
#读取前500行数据
##[500 rows x 11 columns] #读取结果为500行乘以11列的矩阵,成功将数据分离出来了。
#在读取的时候发现系统默认将第一列作为编码,由于实际第一列为数据,因此修改参数index_col=False
data=pd.read_csv(r"E:\Softwarestudy\cdqdata\A_14101_3011.csv", index_col=False,header=None, sep=';',encoding='utf16',engine='python',nrows=500)

特别注意,在python中,false为常规变量,False为特殊代码0。

4 写入代码示例

首先安装pip install openpyxl
writer = pd.ExcelWriter(‘E:\Softwarestudy\cdqdata\test.xlsx’)
提示错误
ModuleNotFoundError: No module named ‘openpyxl’
因此安装上述模块。安装完毕之后又报错:
OSError: [Errno 22] Invalid argument: ‘E:\Softwarestudy\cdqdata\test.xlsx’
经过分析,认为是我的位置中存在\c等问题,因此我将xlsx文件位置改动一下:
writer = pd.ExcelWriter(‘E:\Softwarestudy\Test.xlsx’)
data.to_excel(writer, ‘page_1’, float_format=’%.5f’)
writer.save()
结果正常。记录一下,作为后续的参考。

5 写入excel的另外一种方法

今天在写入的时候出现了几个错误,在此记录一下:
写矩阵的函数如下:

for i in range(h):
        for j in range(l):
                        sheet1.write(i+1, j+1, data[i, j])
                        f.save(path)
 import xlwt
 save(data,'E:\Softwarestudy\cdqdata')
 KeyError: (0, 0) #报错

首先是写矩阵的时候一直出现KeyError: (0, 0),经过查找相关的故障分析,我发现是调用的矩阵没有元素位置。经过反复尝试,最终发现矩阵类型错了:

type(data)  # 采用type函数来查矩阵类型,发现矩阵类型为frame型,不正确。

data[1,1] # 测试调用矩阵,发现还是报错
KeyError: (1, 1) #错误信息
data=np.arrar(data) #转换矩阵为array型
data[1,1]
0.108506940305233 #终于不报错了
save(data,'E:\Softwarestudy\cdqdata') #再次输入代码
PermissionError: [Errno 13] #出现的是另外一种错误,经过查找,发现是路径错了
#反复考虑,是需要输入带有文件的路径
#修改命令如下
save(data,r'E:\Softwarestudy\xlwt_test.xls') #加r是防止转义,

6 read_csv问题

read_csv()函数参数收集:
(1)默认header=0——表示csv文件的第一行默认为dataframe数据的行名称, header=none表示不以第一行为列名
(2)index_col=0——表示使用第0列作为dataframe的行索引,当参数index_col=False 时,自动生成行索引0到n
(3)squeeze=True——表示如果文件只包含一列,则返回一个序列。
(4)sep=’; 表示csv的分隔符形式,以tab键分隔的,故sep=‘\t’
(5)names=[time,value];表明列名;
(6)转换dataframe到array型后,index参数丢失;
(7)skiprows=n,跳过第n行

7 resample参数问题

data=pd.read_csv(f1, index_col=0,header=None, sep=';',encoding='utf16',engine='python',nrows=5,usecols=[0,1], parse_dates = True,skiprows=2,names=['time','values'])  #跳过前2行
date_index = pd.to_datetime(0) #将index改为时间序列
data=data.resample(rule='1S').sum() #重新采样,时间参数为1S,1T为1分钟,1H为1小时,1D为1天,M为月

删除dataframe的数据

DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)

labels 就是要删除的行列的名字,用列表给定
axis 默认为0,指删除行,因此删除columns时要指定axis=1;

data= data.drop(0, 0) #删除第0行数据
data= data.drop(0, 1) #删除第0列数据

以下内容为转载内容:
—————————————————
1对于一个路径 例如C:\Users\xiaoming\Desktop\aa.txt 这里有个\符号 我们知道这个是转义符,我们再之前要加一个r’‘就可以停止转义 r’C:\Users\xiaoming\Desktop\aa.txt’
2就是函数引用时候 参数不加r‘’ ,而在最后输入的时候再加入r’’
————————————————
版权声明:本文为CSDN博主「妖白」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24753293/article/details/78066631

你可能感兴趣的:(软件学习总结,python,csv)