码迷,mamicode.com
首页 > 其他好文 > 详细

pandas介绍以及数据清洗使用

时间:2019-05-25 19:51:16      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:scope   font   dash   空行   数据分析工具   axis   帮助   sys   code   

一、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:123456@localhost/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介绍以及数据清洗使用

标签:scope   font   dash   空行   数据分析工具   axis   帮助   sys   code   

原文地址:https://www.cnblogs.com/languid/p/10923300.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!