Python数据处理,利用Pandas合并csv文件、剔除无效行、做某列计算和格式化输出
测试工作中经常遇到一种情况就是你有两个csv文件,比如一个是车辆底层的CAN数据组成的csv,一个是定位GPS数据组成的csv,它们两个公用一套时间戳,现在想把两个csv合并到一个地方进行计算和处理,那么首先就需要把两个文件读取到同一个表中,按照时间戳进行对齐,然后剔除一些明显无效的数据。1、涉及到的内容Pandas是python下最强大的数据分析和探索工具,它包含高级的数据结构和精巧的工具,..
测试工作中经常遇到一种情况就是你有两个csv文件,比如一个是车辆底层的CAN数据组成的csv,一个是定位GPS数据组成的csv,它们两个公用一套时间戳,现在想把两个csv合并到一个地方进行计算和处理,那么首先就需要把两个文件读取到同一个表中,按照时间戳进行对齐,然后剔除一些明显无效的数据。
1、涉及到的内容
Pandas是python下最强大的数据分析和探索工具,它包含高级的数据结构和精巧的工具,使得在python中处理数据非常快速和简单。
Pandas构建在Numpy之上,它使得以Numpy为中心的应用很容易使用。
Pandas的名称来自于面板数据(Panel Data)和python数据分析(Data Analysis),最初由AQR Captial Management开发出来,用作金融数据分析。
Pandas的功能非常强大,支持类似于SQL的数据增、删、查、改,并且带有丰富的数据处理函数;支持时间序列分析功能;支持灵活处理缺失数据等。
Pandas基本的数据结构是Series和DataFrame。
Seiries就是序列,类似一维数组。为了定位Seiries中的元素,Pandas提供了Index对象,每个Series都会带有一个对应的Index,用来标记不同的元素,Index的内容不一定是数字,也可以是字母、中文等,它类似SQL中的主键。
DataFrame则是相当于一张二维的表格,类似二维数组,它的每一列都是一个Seiries。
DataFrame相当于多个带有同样index的Series的组合(本质是Series的容器),每个Seiries都带有唯一的表头,用来标识不同的Seiries。
Pandas merge功能
pandas中的merge()函数类似于SQL中join的用法,可以将不同数据集依照某些字段(属性)进行合并操作,得到一个新的数据集。
Pandas isin功能
isin()接受一个列表,判断该列中元素是否在列表中,求逆的话可以把剩下的保留下来
Map lambda功能
Series的map方法可以接受一个函数或含有映射关系的字典型对象。
使用map是一种实现元素级转换以及其他数据清理工作的便捷方式。
Pandas loc功能
loc和iloc可以对Pandas的行或者列进行切片处理
2、Python代码实现
简单介绍一下,相关的解释在代码注释里已经注释的很清楚了,在这边不做赘述。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on 20200320
@author: zhongweidu
need python3 + pandas
intall it in termianl by:
sudo apt-get install python3-pandas
how to use it :
python3 test.py data1.csv data2.csv
"""
import sys
import pandas as pd
input_file1 = sys.argv[1]
input_file2 = sys.argv[2]
csv_data1 = pd.read_csv(input_file1,error_bad_lines=False) ## 读取出错的行直接就扔掉了
csv_data2 = pd.read_csv(input_file2,error_bad_lines=False)
# 以csvdata1为引子,按照两个的time进行匹配,把csvdata2加入csvdata1里去;
# how参数中left是以左边为准,right是以右边为准,outer取交集
merged_data = pd.merge(csv_data1,csv_data2,how='left',left_on='time',right_on='time')
# 去除经度等于0.000000的行,其他条件可依次类推
clear_zero_data = merged_data[~merged_data["longitude"].isin([0.0000000])]
# map方式可以用lambda也可以对列进行加减除运算,依次类推
# clear_zero_data['steering_info'] = clear_zero_data['steering_info'].map(lambda x: x+1000)
##保留longitude有效数字为7位;
clear_zero_data['longitude'] = clear_zero_data['longitude'].map(lambda x: ('%.7f')%x)
clear_zero_data['latitude']= clear_zero_data['latitude'].map(lambda x:('%.7f')%x)
## 分别输出CAN文件和TRK文件 名字可以根据传参自动命名,具体可以任意修改
outfile1 = clear_zero_data.loc[:,['time','longitude','latitude','speed']]
outfile2 = clear_zero_data.loc[:,['time','driving_mode','park_status','back_status','lamp_status','braking_info','steering_info','accelerator_info','horn_info']]
outfile1.to_csv("data1_new.csv",index=False)
outfile2.to_csv("data2_new.csv",index=False)
print("Finished!!!")
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)