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: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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM