摘要:一大熊貓世界來去自如的老生常談,從基礎來看,我們仍然關心對于與外部數據是如何交互的。函數受限制問題唯一重要的參數,標志著一個的第個頁將會被取出。數據分析入門之總結基礎一歡迎來翔的博客查看完成版。
一.大熊貓世界來去自如:Pandas的I/O
老生常談,從基礎來看,我們仍然關心pandas對于與外部數據是如何交互的。
1.1 結構化數據輸入輸出
read_csv與to_csv 是?對輸?輸出的?具,read_csv直接返回pandas.DataFrame,?to_csv只要執行命令即可寫文件
read_table:功能類似
read_fwf:操作fixed width file
read_excel與to_excel方便的與excel交互
header 表?數據中是否存在列名,如果在第0行就寫就寫0,并且開始讀數據時跳過相應的行數,不存在可以寫none
names 表示要用給定的列名來作為最終的列名
encoding 表?數據集的字符編碼,通常而言一份數據為了?便的進??件傳輸都以utf-8作為標準
這里用的是自己的一個csv數據,因為找不到參考的這個pdf中的數據。
cnames=["經度","緯度"] taxidata2 = pd.read_csv("20140401.csv",header = 4,names=cnames,encoding="utf-8") taxidata2
全部參數的請移步API:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html#pandas.read_csv
這里介紹一些常用的參數:
讀取處理:
skiprows:跳過?定的?數
nrows:僅讀取?定的?數
skipfooter:尾部有固定的?數永不讀取
skip_blank_lines:空?跳過
內容處理:
sep/delimiter:分隔符很重要,常?的有逗號,空格和Tab(" ")
na_values:指定應該被當作na_values的數值
thousands:處理數值類型時,每千位分隔符并不統? (1.234.567,89或者1,234,567.89都可能),此時要把字符串轉化為
數字需要指明千位分隔符
收尾處理:
index_col:將真實的某列(列的數?,甚?列名)當作index
squeeze:僅讀到?列時,不再保存為pandas.DataFrame?是pandas.Series
1.2 Excel ... ?對于存儲著極為規整數據的Excel而言,其實是沒必要一定用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
注意:當你的xls文件行數很多超過65536時,就會遇到錯誤,解決辦法是將寫入的格式變為xlsx。excel函數受限制問題
唯一重要的參數:sheetname=k,標志著一個excel的第k個sheet頁將會被取出。(從0開始)
1.3 半結構化數據JSON:網絡傳輸中常?的?種數據格式。
仔細看一下,實際上這就是我們平時收集到異源數據的風格是一致的:
列名不能完全匹配
key可能并不唯一
元數據被保存在數據里
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
輸出結果:
二. 深入Pandas數據操縱在前面部分的基礎上,數據會有更多種操縱方式:
通過列名、行index來取數據,結合ix、iloc靈活的獲取數據的一個子集(第一部分已經介紹)
按記錄拼接(就像Union All)或者關聯(join)
方便的統計函數與?定義函數映射
排序
缺失值處理
與Excel一樣靈活的數據透視表(在第四部分更詳細介紹)
2.1 數據集整合 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])
輸出結果
2.1.3 縱向拼接:Merge根據數據列關聯,使用on關鍵字
可以指定一列或多列
可以使?left_on和right_on
pd.merge(data_employee_ri,data_employee_ri,on="name")
根據index關聯,可以直接使用left_index和right_index
TIPS: 增加how關鍵字,并指定
how = "inner"
how = "left"
how = "right"
how = "outer"
結合how,可以看到merge基本再現了SQL應有的功能,并保持代碼整潔
2.2 自定義函數映射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: 以相同規則將1列數據作1個映射,也就是進行相同函數的處理
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: 按?列或者多列的值進行行級排序
sort_index: 根據index?的取值進行排序,而且可以根據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 一個好用的功能:Rank
DF33.rank()2.4 缺失數據處理 2.4.1 忽略缺失值:
DF34.mean(skipna=True)
不忽略缺失值的話,估計就不能計算均值了吧。
如果不想忽略缺失值的話,就需要祭出fillna了:
注:這里我在猜想,axis=1是不是就代表從行的角度呢?還是得多讀書查資料呀。
三. “一組”大熊貓:Pandas的groupbygroupby的功能類似SQL的group by關鍵字:
Split-Apply-Combine
Split,就是按照規則分組
Apply,通過?定的agg函數來獲得輸?pd.Series返回?個值的效果
Combine,把結果收集起來
Pandas的groupby的靈活性:
分組的關鍵字可以來?于index,也可以來?于真實的列數據
分組規則可以通過?列或者多列
沒有具體數據,截圖看一下吧,方便日后回憶。
分組可以快速實現MapReduce的邏輯
Map: 指定分組的列標簽,不同的值就會被扔到不同的分組處理
Reduce: 輸入多個值,返回1個值,一般可以通過agg實現,agg能接受1個函數
參考:S1EP3_Pandas.pdf 不知道什么時候存到電腦里的資料,今天發現了它。感謝作者的資料。
Python數據分析入門之pandas總結基礎(一)
歡迎來Michael翔的博客查看完成版。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/37698.html
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:整個序列級別的元數據信息當數據序列以及本身有了名字,就可以更方便的進行后續的數據關聯啦這里我感覺就是列名的作用。數據分析入門之總結基礎二歡迎來翔的博客查看完成版。 一. Series Series: pandas的長槍(數據表中的一列或一行,觀測向量,一維數組...) Series1 = pd.Series(np.random.randn(4)) print Series1,typ...
摘要:數據分析的發展方向一般有商業方向,行業分析業務方向,和機器學習數據挖掘方向。機器學習的書籍推薦統計學習方法,機器學習,機器學習實戰三本書。 作者:xiaoyu 微信公眾號:Python數據科學 知乎:python數據分析師 上一篇主要分享了博主親身轉行數據分析的經歷: 【從零學起到成功轉行數據分析,我是怎么做的?】 本篇繼上一篇將分享轉行數據分析的一些經驗和學習方法,看完這篇你將會解...
閱讀 2402·2021-10-09 09:41
閱讀 3204·2021-09-26 09:46
閱讀 848·2021-09-03 10:34
閱讀 3187·2021-08-11 11:22
閱讀 3382·2019-08-30 14:12
閱讀 721·2019-08-26 11:34
閱讀 3355·2019-08-26 11:00
閱讀 1787·2019-08-26 10:26