摘要:一大熊貓世界來去自如的老生常談,從基礎(chǔ)來看,我們?nèi)匀魂P(guān)心對于與外部數(shù)據(jù)是如何交互的。函數(shù)受限制問題唯一重要的參數(shù),標(biāo)志著一個(gè)的第個(gè)頁將會被取出。數(shù)據(jù)分析入門之總結(jié)基礎(chǔ)一歡迎來翔的博客查看完成版。
一.大熊貓世界來去自如:Pandas的I/O
老生常談,從基礎(chǔ)來看,我們?nèi)匀魂P(guān)心pandas對于與外部數(shù)據(jù)是如何交互的。
1.1 結(jié)構(gòu)化數(shù)據(jù)輸入輸出
read_csv與to_csv 是?對輸?輸出的?具,read_csv直接返回pandas.DataFrame,?to_csv只要執(zhí)行命令即可寫文件
read_table:功能類似
read_fwf:操作fixed width file
read_excel與to_excel方便的與excel交互
header 表?數(shù)據(jù)中是否存在列名,如果在第0行就寫就寫0,并且開始讀數(shù)據(jù)時(shí)跳過相應(yīng)的行數(shù),不存在可以寫none
names 表示要用給定的列名來作為最終的列名
encoding 表?數(shù)據(jù)集的字符編碼,通常而言一份數(shù)據(jù)為了?便的進(jìn)??件傳輸都以utf-8作為標(biāo)準(zhǔn)
這里用的是自己的一個(gè)csv數(shù)據(jù),因?yàn)檎也坏絽⒖嫉倪@個(gè)pdf中的數(shù)據(jù)。
cnames=["經(jīng)度","緯度"] taxidata2 = pd.read_csv("20140401.csv",header = 4,names=cnames,encoding="utf-8") taxidata2
全部參數(shù)的請移步API:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html#pandas.read_csv
這里介紹一些常用的參數(shù):
讀取處理:
skiprows:跳過?定的?數(shù)
nrows:僅讀取?定的?數(shù)
skipfooter:尾部有固定的?數(shù)永不讀取
skip_blank_lines:空?跳過
內(nèi)容處理:
sep/delimiter:分隔符很重要,常?的有逗號,空格和Tab(" ")
na_values:指定應(yīng)該被當(dāng)作na_values的數(shù)值
thousands:處理數(shù)值類型時(shí),每千位分隔符并不統(tǒng)? (1.234.567,89或者1,234,567.89都可能),此時(shí)要把字符串轉(zhuǎn)化為
數(shù)字需要指明千位分隔符
收尾處理:
index_col:將真實(shí)的某列(列的數(shù)?,甚?列名)當(dāng)作index
squeeze:僅讀到?列時(shí),不再保存為pandas.DataFrame?是pandas.Series
1.2 Excel ... ?對于存儲著極為規(guī)整數(shù)據(jù)的Excel而言,其實(shí)是沒必要一定用Excel來存,盡管Pandas也十分友好的提供了I/O接口。
taxidata.to_excel("t0401.xlsx",encoding="utf-8") taxidata_from_excel = pd.read_excel("t0401.xlsx",header=0, encoding="utf-8") taxidata_from_excel
注意:當(dāng)你的xls文件行數(shù)很多超過65536時(shí),就會遇到錯(cuò)誤,解決辦法是將寫入的格式變?yōu)?b>xlsx。excel函數(shù)受限制問題
唯一重要的參數(shù):sheetname=k,標(biāo)志著一個(gè)excel的第k個(gè)sheet頁將會被取出。(從0開始)
1.3 半結(jié)構(gòu)化數(shù)據(jù)JSON:網(wǎng)絡(luò)傳輸中常?的?種數(shù)據(jù)格式。
仔細(xì)看一下,實(shí)際上這就是我們平時(shí)收集到異源數(shù)據(jù)的風(fēng)格是一致的:
列名不能完全匹配
key可能并不唯一
元數(shù)據(jù)被保存在數(shù)據(jù)里
import json json_data = [{"name":"Wang","sal":50000,"job":"VP"}, {"name":"Zhang","job":"Manager","report":"VP"}, {"name":"Li","sal":5000,"report":"IT"}] data_employee = pd.read_json(json.dumps(json_data)) data_employee_ri = data_employee.reindex(columns=["name","job","sal","report"]) data_employee_ri
輸出結(jié)果:
二. 深入Pandas數(shù)據(jù)操縱在前面部分的基礎(chǔ)上,數(shù)據(jù)會有更多種操縱方式:
通過列名、行index來取數(shù)據(jù),結(jié)合ix、iloc靈活的獲取數(shù)據(jù)的一個(gè)子集(第一部分已經(jīng)介紹)
按記錄拼接(就像Union All)或者關(guān)聯(lián)(join)
方便的統(tǒng)計(jì)函數(shù)與?定義函數(shù)映射
排序
缺失值處理
與Excel一樣靈活的數(shù)據(jù)透視表(在第四部分更詳細(xì)介紹)
2.1 數(shù)據(jù)集整合 2.1.1 橫向拼接:直接DataFramepd.DataFrame([np.random.rand(2),np.random.rand(2),np.random.rand(2)],columns=["C1","C2"])2.1.2 橫向拼接:Concatenate
pd.concat([data_employee_ri,data_employee_ri,data_employee_ri])
輸出結(jié)果
2.1.3 縱向拼接:Merge根據(jù)數(shù)據(jù)列關(guān)聯(lián),使用on關(guān)鍵字
可以指定一列或多列
可以使?left_on和right_on
pd.merge(data_employee_ri,data_employee_ri,on="name")
根據(jù)index關(guān)聯(lián),可以直接使用left_index和right_index
TIPS: 增加how關(guān)鍵字,并指定
how = "inner"
how = "left"
how = "right"
how = "outer"
結(jié)合how,可以看到merge基本再現(xiàn)了SQL應(yīng)有的功能,并保持代碼整潔
2.2 自定義函數(shù)映射dataNumPy32 = np.asarray([("Japan","Tokyo",4000),("S.Korea","Seoul",1300),("China","Beijing",9100)]) DF32 = pd.DataFrame(dataNumPy32,columns=["nation","capital","GDP"]) DF322.2.1 map: 以相同規(guī)則將1列數(shù)據(jù)作1個(gè)映射,也就是進(jìn)行相同函數(shù)的處理
def GDP_Factorize(v): fv = np.float64(v) if fv > 6000.0: return "High" elif fv < 2000.0: return "Low" else: return "Medium" DF32["GDP_Level"] = DF32["GDP"].map(GDP_Factorize) DF32["NATION"] = DF32.nation.map(str.upper) DF322.3 排序
sort: 按?列或者多列的值進(jìn)行行級排序
sort_index: 根據(jù)index?的取值進(jìn)行排序,而且可以根據(jù)axis決定是重排行還是列
2.3.1 sortdataNumPy33 = np.asarray([("Japan","Tokyo",4000),("S.Korea","Seoul",1300),("China","Beijing",9100)]) DF33 = pd.DataFrame(dataNumPy33,columns=["nation","capital","GDP"]) DF33
DF33.sort(["capital","nation"],ascending=False)
ascending是降序的意思。
2.3.2 sort_indexDF33.sort_index(axis=1,ascending=True)2.3.3 一個(gè)好用的功能:Rank
DF33.rank()2.4 缺失數(shù)據(jù)處理 2.4.1 忽略缺失值:
DF34.mean(skipna=True)
不忽略缺失值的話,估計(jì)就不能計(jì)算均值了吧。
如果不想忽略缺失值的話,就需要祭出fillna了:
注:這里我在猜想,axis=1是不是就代表從行的角度呢?還是得多讀書查資料呀。
三. “一組”大熊貓:Pandas的groupbygroupby的功能類似SQL的group by關(guān)鍵字:
Split-Apply-Combine
Split,就是按照規(guī)則分組
Apply,通過?定的agg函數(shù)來獲得輸?pd.Series返回?個(gè)值的效果
Combine,把結(jié)果收集起來
Pandas的groupby的靈活性:
分組的關(guān)鍵字可以來?于index,也可以來?于真實(shí)的列數(shù)據(jù)
分組規(guī)則可以通過?列或者多列
沒有具體數(shù)據(jù),截圖看一下吧,方便日后回憶。
分組可以快速實(shí)現(xiàn)MapReduce的邏輯
Map: 指定分組的列標(biāo)簽,不同的值就會被扔到不同的分組處理
Reduce: 輸入多個(gè)值,返回1個(gè)值,一般可以通過agg實(shí)現(xiàn),agg能接受1個(gè)函數(shù)
參考:S1EP3_Pandas.pdf 不知道什么時(shí)候存到電腦里的資料,今天發(fā)現(xiàn)了它。感謝作者的資料。
Python數(shù)據(jù)分析入門之pandas總結(jié)基礎(chǔ)(一)
歡迎來Michael翔的博客查看完成版。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/37698.html
摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:整個(gè)序列級別的元數(shù)據(jù)信息當(dāng)數(shù)據(jù)序列以及本身有了名字,就可以更方便的進(jìn)行后續(xù)的數(shù)據(jù)關(guān)聯(lián)啦這里我感覺就是列名的作用。數(shù)據(jù)分析入門之總結(jié)基礎(chǔ)二歡迎來翔的博客查看完成版。 一. Series Series: pandas的長槍(數(shù)據(jù)表中的一列或一行,觀測向量,一維數(shù)組...) Series1 = pd.Series(np.random.randn(4)) print Series1,typ...
摘要:數(shù)據(jù)分析的發(fā)展方向一般有商業(yè)方向,行業(yè)分析業(yè)務(wù)方向,和機(jī)器學(xué)習(xí)數(shù)據(jù)挖掘方向。機(jī)器學(xué)習(xí)的書籍推薦統(tǒng)計(jì)學(xué)習(xí)方法,機(jī)器學(xué)習(xí),機(jī)器學(xué)習(xí)實(shí)戰(zhàn)三本書。 作者:xiaoyu 微信公眾號:Python數(shù)據(jù)科學(xué) 知乎:python數(shù)據(jù)分析師 上一篇主要分享了博主親身轉(zhuǎn)行數(shù)據(jù)分析的經(jīng)歷: 【從零學(xué)起到成功轉(zhuǎn)行數(shù)據(jù)分析,我是怎么做的?】 本篇繼上一篇將分享轉(zhuǎn)行數(shù)據(jù)分析的一些經(jīng)驗(yàn)和學(xué)習(xí)方法,看完這篇你將會解...
閱讀 2381·2021-10-09 09:41
閱讀 3172·2021-09-26 09:46
閱讀 835·2021-09-03 10:34
閱讀 3151·2021-08-11 11:22
閱讀 3364·2019-08-30 14:12
閱讀 711·2019-08-26 11:34
閱讀 3344·2019-08-26 11:00
閱讀 1750·2019-08-26 10:26