《Python3爬蟲、數(shù)據(jù)清洗和可視化實(shí)戰(zhàn)》
零一 韓要賓 黃園園 著
第九章:pandas數(shù)據(jù)清理
9.1 數(shù)據(jù)讀寫、選擇、整理和描述
Pandas是用來數(shù)據(jù)清洗的Python庫,由于它的依賴庫很多,所以建議還是下載anaconda,里面內(nèi)置了相關(guān)庫。
9.1.1 讀取CSV數(shù)據(jù)
df = pd.read_csv(“csv_path”,delimiter=”,”,encoding=””)
參數(shù)說明:
“csv_path”,CSV文件路徑;delimiter=”,”:分隔方式;encoding=””:文件編碼格式。
9.1.2 向CSV寫入數(shù)據(jù)
df.to_csv(“csv_path”,columns=[‘value1’,’value2’],index=False,header=True)
參數(shù)說明:
“csv_path”文件路徑,columns=[‘value1’,’value2’]:需要寫入的數(shù)據(jù),index=False:將DataFrame保存成文件,并忽略索引信息(True為默認(rèn)值,保存索引信息),header=True
查看表中的描述性統(tǒng)計(jì)信息
df.describe()
9.2 數(shù)據(jù)分組,分割,合并和變形
9.2.1數(shù)據(jù)分組
Groupby:
Means = df[“成交量”].groupby(df[“成交量”],df[“賣家”]).mean()
>>>Means
size方法:返回一個(gè)含有各個(gè)分組大小的Series
9.2.2數(shù)據(jù)分割
df1=df[30:40][[‘位置’,’賣家’]]
#df1中包含第30-39行數(shù)據(jù)
9.2.3數(shù)據(jù)合并
Pandas包含三種內(nèi)置的合并數(shù)據(jù)集方法:
Pandas.merge | 根據(jù)一個(gè)或多個(gè)鍵將多個(gè)DataFrame連接起來 |
---|---|
Pandas.concat | 可以沿著一個(gè)軸將多個(gè)對(duì)象堆疊起來 |
Combine_first | 可以將重疊部分合并,用以填充缺失部分 |
Pandas.merge(df1,df2,on=” Column_name”,how=”inner/outer/left”,left_index=True,right_index=true)
參數(shù)說明:
On:合并相同列名的列,默認(rèn)會(huì)選擇相同列名。
How:包含inner(內(nèi)連接),outer(外連接),left(左連接),right(右連接)
內(nèi)連接 | 兩個(gè)表中相同數(shù)據(jù)合并輸出 |
---|---|
外連接 | 兩個(gè)表中全部數(shù)據(jù)合并輸出 |
左連接 | 以左邊表(df1)為基礎(chǔ),添加df1中沒有的行屬性(從df2中找新數(shù)據(jù)) |
左連接 | 以右邊表(df2)為基礎(chǔ),添加df2中沒有的行屬性(從df1中找新數(shù)據(jù)) |
left_index:將左邊表(df1)索引作為連接鍵
right_index:將右邊表(df2)索引作為連接鍵(df1.join(df2):join方法同樣可以將索引作為連接鍵使用)
Pandas.concat([s1,s2,s3])
#沿著s1,s2,s3的軸合并在一起
9.2.4 數(shù)據(jù)變形
Data.stack()方法:將Data的列轉(zhuǎn)換為行
Data.unstack()方法:將Data的行轉(zhuǎn)換為列
9.3 缺失值、異常值和重復(fù)值處理
9.3.1 缺失值處理
查看缺失值:
df1.isnull()
刪除行:
df1.dropna()
代替缺失值:
df1.fillna(“代替值”)
df1.fillna(method=”pad/bfill”,limit=1)
#pad使用前一個(gè)同屬性的數(shù)據(jù)代替空值;fill使用后一個(gè)同屬性的數(shù)據(jù)代替空值;limit表示每列代替空值的數(shù)目
9.3.3 移除重復(fù)值
判斷是否存在重復(fù)值:
df1.duplicated()
刪除重復(fù)數(shù)據(jù):
df1.drop_duplicates()
9.4 時(shí)序數(shù)據(jù)處理
9.4.1 日期/時(shí)間數(shù)據(jù)轉(zhuǎn)換
import time
>>>Time.time() #輸出系統(tǒng)時(shí)間戳
>>>time.localtime() #輸出系統(tǒng)時(shí)間
>>>time.mktime(time.localtime()) #將系統(tǒng)時(shí)間轉(zhuǎn)化為時(shí)間戳
9.4.2 時(shí)序數(shù)據(jù)基礎(chǔ)操作
import datetime
import numpy as np
import pandas as pd
#periods表示輸出幾天(從2019-05-17開始計(jì)算);freq表示按照什么單位生成序列(M/D/H:月/天/小時(shí))
Pd.date_range(“2019-05-17”,periods=31,freq=”M/D/H”)
(
"Life's a mixed bag, no matter who you are."--《About Time》
)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
