pandas介绍以及数据清洗使用
Posted languid
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas介绍以及数据清洗使用相关的知识,希望对你有一定的参考价值。
一、Pandas概要介绍
pandas是一个开源的,BSD许可的库,为Python编程语言提供高性能,易于使用的数据结构和数据分析工具。可以用于对CSV和文本文件、Microsoft Excel、SQL数据库数据的读写。
能够帮助数据清洗,数据分析和数据建模。
二、主要的两种数据结构
序列(Series):一维标记数组,能够保存任何数据类型,有索引。
s = pd.Series([1,2,3],index=[‘a‘,‘b‘,‘c‘]) print(s)
数据帧(dataframe):二维标记数据结构,可以传递行索引和列索引。
d = pd.DataFrame([[1,2,3],[4,5,6]], columns=[‘a‘,‘b‘,‘c‘]) print(d)
三、使用pandas读取csv文件存入mysql
import pymysql import numpy as np import pandas as pd from pandas import DataFrame import datetime import sys import pymysql import csv db = pymysql.connect(‘localhost‘, ‘root‘, ‘123456‘, ‘languid‘) if __name__ == ‘__main__‘: filepath= sys.argv[1] f = pd.read_csv(filepath,engine=‘python‘,sep=‘,‘,index_col=[0],header=[0])#去掉索引 q=f.drop([‘abc‘,‘deg‘],axis=1)#去掉列abc deg qq= q[‘APZWMC‘].str.split(‘-‘,expand=True)#拆分 qqq=pd.merge(q,qq,on=‘APMAC‘,how=‘right‘)#拼接dataframe 以APMAC列为关键组合列 qqq[‘sum‘]=qqq[‘APGLDMC‘]+qqq[‘APJWD‘]#这两列都是数字 把他们相加并生成新的一列负在后面 new_qqq=qqq.rename(columns={0: ‘A‘, 1: ‘B‘}, inplace=False) data=[] for row in new_qqq.itertuples():#按顺序遍历,将DataFrame迭代为元祖 row_tuple= [row.Index, row.APMC, row.APZWMC, row.APGLDDM, row.APGLDMC, row.APJWD, row.A,row.B,row.sum] data.append(row_tuple) print(row) cursor = db.cursor() sql = ‘INSERT INTO SJJH_APXXB2 (APMAC,APMC,APZWMC,APGLDDM,APGLDMC,APJWD,A,B,sum) values (%s,%s,%s,%s,%s,%s,%s,%s,%s)‘#表在mysql中已经建好了 直接插入 cursor.executemany(sql,data) db.commit() db.close()
第二种
import numpy as np import pandas as pd from pandas import DataFrame import datetime import sys import pymysql import csv from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker engine = create_engine(‘mysql+pymysql://root:[email protected]/languid?charset=utf8‘) db = scoped_session(sessionmaker(bind=engine)) aa=[] if __name__ == ‘__main__‘: f = pd.read_csv(‘c://百度网盘//xingqiu.csv‘,engine=‘python‘,sep=‘,‘,index_col=[0],header=[0]) q=f.drop([‘abc‘,‘deg‘],axis=1) qq= q[‘APZWMC‘].str.split(‘-‘,expand=True) qqq=pd.merge(q,qq,on=‘APMAC‘,how=‘right‘) qqq[‘sum‘]=qqq[‘APGLDMC‘]+qqq[‘APJWD‘] new_qqq=qqq.rename(columns={0: ‘A‘, 1: ‘B‘}, inplace=False) pd.pivot_table(qqq,index=[‘APMAC‘],values=[‘APZWMC‘],aggfunc=‘count‘) for iii in pd.pivot_table: print(iii) pd.io.sql.to_sql(b, ‘sjjh_apxxb‘, engine, schema=‘languid‘, if_exists=‘append‘)#append:如果表存在,则将数据添加到这个表的后面fail:如果表存在就不操作replace:如果存在表,删了,重建 db.commit() db.close()
四、用pandas清洗数据的一些操作
import pandas as pd data = pd.read_csv(‘c://百度网盘//movie_metadata.csv‘,engine=‘python‘,sep=‘,‘) # print(data.head()) print(data.genres.describe()) # print(data[‘genres‘]) #删除不完整的行 data.country=data.country.fillna(‘‘)#用空字符串代替NAN值 data.dropna()#删除任何包含NA值的行 data.dropna(how=‘all‘)#删除一整行的值都为NA data.drop(theresh=5)#在行数据有至少5个为非na的数据 data.dropna(subset=[‘title_year‘])#去掉上映时间这个数据 #删除不完整的列 data.drop(axis=1,how=‘all‘)#删除一整列为na的列 data.drop(axis=1,how=‘any‘)#删除任何包含空值的列 #必要的变换 data[‘movie_title‘].str.upper() #将title大写 data[‘movei_title‘].str.strip()#去掉末尾空格 #重命名列名 data.rename(columns={‘title_year‘:‘release_dae‘,‘move_facebook_likes‘:‘facebook_likes‘}) #保存结果 data.to_csv(‘cleanfile.csv‘,encoding=‘utf-8‘)
import pandas as pd # data = pd.read_csv(‘c://百度网盘//movie_metadata.csv‘,engine=‘python‘,sep=‘,‘) #没有列头 column_names= [‘id‘, ‘name‘, ‘age‘, ‘weight‘,‘m0006‘,‘m0612‘,‘m1218‘,‘f0006‘,‘f0612‘,‘f1218‘] df = pd.read_csv(‘../data/patient_heart_rate.csv‘, names = column_names) #一个列有多个参数 df[‘first_name‘,‘last_name‘]=df[‘name‘].str.split(expand=True) df.drop(‘name‘,axis=1,inplace=True) #列数据的单位不统一 rows_with_lbs = df[‘weight‘].str.contains(‘lbs‘).fillna(False) df[rows_with_lbs] for i,lbs_row in df[rows_with_lbs].iterrows(): weight=int(float(lbs_row[‘wieght‘][:-3])/2.2) df.at[i,‘weight‘]=‘{}kgs‘.format(weight) #空行 df.dropna(how=‘all‘,inplace=True)#删除全空的行 #重复数据 df.drop_duplicates([‘first_name‘,‘last_name‘],inpalec=True) #非ASCII字符 df[‘first_name‘].replace({r‘[^\\x00-\\x7F]+‘:‘‘}, regex=True, inplace=True) #有些列头应该是数据,而不是列名参数
import pandas as pd df =pd.read_csv(‘C://百度网盘//Artworks.csv‘).head(100) #时间范围变成时间 row_with_dashes= df[‘Data‘].str.contains(‘-‘).fillna(False) for i,dash in df[row_with_dashes].iterrows(): df.at[i,‘data‘] = dash[‘Data‘][0:4] df[‘Date‘].value_counts #c.1971变成时间 后四位 row_with_cs=df[‘Data‘].str.contains(‘c‘).fillna(False) for i,row in df[row_with_cs].iterrrows(): df.at[i,‘Data‘] = row[‘Date‘][-4:] df[row_with_cs] #问题数据赋值为0 df[‘Data‘] = df[‘Date‘].replace(‘Unknown‘,‘0‘,regex=True) df[‘Data‘] = df[‘Date‘].replace(‘n.d‘,‘0‘,regex=True) #选择指定单元格 #选取 windspeed 整列数据 print(type(df.loc[:,[‘windspeed‘]])) #选区列索引为1,2的整行数据 print(type(df.iloc[:,[1,2]])) #选区索引为1和2的整行数据 print(type(df.loc[1,2])) #选择windspeed 整列数据 print(type(df[‘windspeed‘]))
pandas中文文档:https://www.pypandas.cn/document/merging.html
其他参考链接:https://www.cnblogs.com/BoyceYang/p/8182053.html
以上是关于pandas介绍以及数据清洗使用的主要内容,如果未能解决你的问题,请参考以下文章
学习pandas全套代码超详细数据查看输入输出选取集成清洗转换重塑数学和统计方法排序
用pandas进行数据清洗(Data Analysis Pandas Data Munging/Wrangling)