1. 程式人生 > >python-pandas使用樣例及速查表

python-pandas使用樣例及速查表

pandas常用使用樣例及速查表

1.重建index

frame = DataFrame({'a': range(7), 'b': range(7, 0, -1),
                   'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'], 'd': [0, 1, 2, 0, 1, 2, 3]})
print frame
#  重建index   drop是否刪除變為index的欄位
print frame.set_index(['c', 'd'], drop=False)
print frame.reset_index()  # 恢復


2.調換索引級別

frame = DataFrame(np.arange(12).reshape((4, 3)),
                  index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
                  columns=[['Ohio', 'Ohio', 'Colorado'],['Green', 'Red', 'Green']])
print frame
#  調換索引級別
print frame.swaplevel(0, 1, axis=1)

3.資料合併

df1 = DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],'data1': range(7)})
df2 = DataFrame({'key': ['a', 'b', 'd'],'data2': range(3)})
df3 = DataFrame({'lkey': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],'data1': range(7)})
df4 = DataFrame({'rkey': ['a', 'b', 'd'],'data2': range(3)})
left = DataFrame({'key1': ['foo', 'foo', 'bar'],'key2': ['one', 'two', 'one'],'lval': [1, 2, 3]})
right = DataFrame({'key1': ['foo', 'foo', 'bar', 'bar'],'key2': ['one', 'one', 'one', 'two'],'rval': [4, 5, 6, 7]})
left1 = DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'],'value': range(6)})
right1 = DataFrame({'group_val': [3.5, 7]}, index=['a', 'b'])
lefth = DataFrame({'key1': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'key2': [2000, 2001, 2002, 2001, 2002],'data': np.arange(5.)})
righth = DataFrame(np.arange(12).reshape((6, 2)),index=[['Nevada', 'Nevada', 'Ohio', 'Ohio', 'Ohio', 'Ohio'],[2001, 2000, 2000, 2000, 2001, 2002]],columns=['event1', 'event2'])
# 統一使用key鍵,預設內聯
print pd.merge(df1, df2, on='key')


#  左鍵lkey,右鍵rkey,方式外聯
print pd.merge(df3, df4, left_on='lkey', right_on='rkey', how='outer')
#  以['key1','key2']為鍵合併
print pd.merge(left, right, on=['key1', 'key2'], how='outer')


#  以key1為鍵合併,並特殊標記其他重名鍵
print pd.merge(left, right, on='key1', suffixes=('_left', '_right'), how='outer')


#  左鍵key,右鍵使用索引
print pd.merge(left1, right1, left_on='key', right_index=True)
#  左鍵key,右鍵使用索引(多級索引)
print pd.merge(lefth, righth, left_on=['key1', 'key2'], right_index=True)


4.資料拼接

s1 = Series([0, 1], index=['a', 'b'])
s2 = Series([2, 3, 4], index=['c', 'd', 'e'])
s3 = Series([5, 6], index=['f', 'g'])
s4 = pd.concat([s1 * 5, s3])
df1 = DataFrame(np.arange(6).reshape(3, 2), index=['a', 'b', 'c'],columns=['one', 'two'])
df2 = DataFrame(5 + np.arange(4).reshape(2, 2), index=['a', 'c'],columns=['three', 'four'])
#  資料拼接
print pd.concat([s1, s2, s3])
print pd.concat([s1, s2, s3], axis=1)


#  指定拼接方式
print pd.concat([s1, s4], axis=1, join='inner')
#  指定拼接索引
print pd.concat([s1, s4], axis=1, join_axes=[['a', 'c', 'b', 'e']])


#  對拼接資料來源標記索引
print pd.concat([s1, s1, s4], keys=['one', 'two', 'three'])
print pd.concat([df1, df2], axis=1, keys=['level1',' level2'])


df1 = DataFrame(np.random.randn(3, 4), columns=['a', 'b', 'c', 'd'])
df2 = DataFrame(np.random.randn(2, 3), columns=['b', 'd', 'a'])
#  拼接資料後,取消索引
print pd.concat([df1, df2], ignore_index=True)


5.資料轉換

data = DataFrame({'food': ['bacon', 'pulled pork', 'bacon', 'pastrami','corned beef', 'bacon', 'pastrami', 'honey ham','nova lox', 'apple'],
                  'ounces': [4, 3, 12, 6, 7.5, 8, 3, 5, 6, 0]})
meat_to_animal = {'bacon': 'pig', 'pulled pork': 'pig', 'pastrami': 'cow', 'corned beef': 'cow', 'honey ham': 'pig', 'nova lox': 'salmon'}
#  map轉換
print data['food'].map(meat_to_animal)
#  transform 使用自定義的函式進行轉換
print data['food'].transform(lambda x: meat_to_animal[x] if x in meat_to_animal else 'fruit')


6.資料切割

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
bins = [18, 25, 35, 60, 100]
#  資料切割
print pd.cut(ages, bins).value_counts()
#  左閉右開
print pd.cut(ages, bins, right=False).value_counts()
group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior']
#  切割重新命名
print pd.cut(ages, bins, labels=group_names).value_counts()


7.字串處理

data = Series({'Dave': '[email protected]', 'Steve': '[email protected]','Rob': '[email protected]', 'Wes': np.nan})
pattern = '([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\\.([A-Z]{2,4})'
#  字串匹配
print data.str.contains('google')
#  字串切割
print data.str.findall(pattern, flags=re.IGNORECASE)


8.資料聚合

df = DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'], 'key2': ['one', 'two', 'one', 'two', 'one'],
                'data1': np.random.randn(5), 'data2': np.random.randn(5)})
#  列多維度聚合
print df['data1'].groupby([df['key1'], df['key2']]).mean()
#  列多維度聚合並在該維度展開
print df['data1'].groupby([df['key1'], df['key2']]).mean().unstack()
#  限定聚合的列的值
print df.groupby('key1')['data1'].mean()

people = DataFrame(np.arange(25).reshape(5, 5), columns=['a', 'b', 'c', 'd', 'e'],
                   index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
mapping = {'a': 'red', 'b': 'red', 'c': 'blue', 'd': 'blue', 'e': 'red', 'f': 'orange'}
key_list = ['one', 'one', 'one', 'two', 'two']
#  列按dict規則聚合
print people.groupby(mapping, axis=1).sum()
#  函式規則聚合:按索引字串長度聚合
print people.groupby(len).sum()
#  複合聚合
print people.groupby([len, key_list]).sum()


columns = pd.MultiIndex.from_arrays([['US', 'US', 'US', 'JP', 'JP'], [1, 3, 5, 1, 3]], names=['cty', 'tenor'])
hier_df = DataFrame(np.arange(20).reshape(4, 5), columns=columns)
#  根據索引級別聚合
print hier_df.groupby(level='tenor', axis=1).sum()

tips_dict = {'total_bill': [16.99, 10.34, 21.01, 23.68, 24.59, 25.29], 'tip': [1.01, 1.66, 3.50, 3.31, 3.61, 4.71],
             'sex': ['F', 'M', 'M', 'M', 'F', 'M'], 'smoker': ['N', 'Y', 'N', 'N', 'Y', 'Y'],
             'sizes': [1, 2, 3, 4, 5, 6]}
tips = DataFrame(tips_dict)
tips['tip_pct'] = tips['tip'] / tips['total_bill']
print tips
#  groupby取消索引
print tips.groupby(['sex', 'smoker'], as_index=False).mean()
#  按group做apply
print tips.groupby('smoker').apply(lambda x: x.sort_values(by='tip_pct'))
#  資料透視表,預設使用mean聚合
print tips.pivot_table(index=['sex'], columns=['smoker'])
#  資料透視表,margins表示新增彙總項(all)
print tips.pivot_table(index=['sex'], columns=['smoker'], margins=True)
#  aggfunc 指定聚合運算規則
print tips.pivot_table(index='sex', columns='smoker', aggfunc=sum)
#  快速建立透視表,預設sum聚合
print pd.crosstab([tips.sex, tips.sizes], tips.smoker, margins=True)
grouped = tips.groupby(['sex', 'smoker'])
print grouped['tip_pct'].mean()
#  資料分析聚合並命名, tuple內首引數為列名,尾引數為運算規則
print grouped['tip_pct'].agg([('foo', 'mean'), ('bar', np.std)])
#  單列多型別分析聚合
print grouped.agg({'tip_pct': ['min', 'max', 'mean', ('std_name', np.std)], 'tip': 'sum'})
frame = DataFrame({'data1': np.arange(1, 1001), 'data2': np.arange(1001, 2001)})
def get_stats(group):
    return {'min': group.min(), 'max': group.max(), 'count': group.count(), 'mean': group.mean()}
#  將data1列按值平分為4組,並在其基礎上分析data2列
print frame.data2.groupby(pd.cut(frame.data1, 4)).apply(get_stats).unstack()
#  將data1列按數量平分為10組,並在其基礎上分析data2列
print frame.data2.groupby(pd.qcut(frame.data1, 10, labels=False)).apply(get_stats).unstack()
states = ['Ohio', 'New York', 'Vermont', 'Florida', 'Oregon', 'Nevada', 'California', 'Idaho']
group_key = ['East'] * 4 + ['West'] * 4
data = Series(np.arange(8), index=states)
data[['Vermont', 'Nevada', 'Idaho']] = np.nan
fill_values = {'East': 50, 'West': 100}
#  apply方法填充缺失值
print data.groupby(group_key).apply(lambda x: x.fillna(x.mean()))
print data.groupby(group_key).apply(lambda x: x.fillna(fill_values[x.name]))

相關推薦

python-pandas使用

pandas常用使用樣例及速查表 1.重建index frame = DataFrame({'a': range(7), 'b': range(7, 0, -1), 'c': ['one', 'one', 'one', 'two',

可能是史上最全的機器學習和Python(包括數學)

最好 pytorch 資料 sub mat 出了 statistic 遇到 FQ 新手學習機器學習很難,就是收集資料也很費勁。所幸Robbie Allen從不同來源收集了目前最全的有關機器學習、Python和相關數學知識的速查表大全。強烈建議收藏! 機器學習有很多方面

Python學習必備法寶之

近日,有一叫Python-cheatsheet專案在Hacker News、Reddit、Github等網站上成功引起了廣大程式設

pandas基礎命令

根據 位置 isn sha cat dataframe app 導出 fill pandas基礎命令速查表 數據的導入 數據的導出 創建測試對象 數據的查看與檢查 數據的選取 數據的清洗 數據的過濾(filter)排序(sort)和分組(group) 數據的連接(joi

機器學習 Python基礎1 Pandas DataFrame 常用方法手冊中文版

本文轉載自知乎文章 Pandas速查手冊中文版 ,原英文版 Pandas Cheat Sheet - Python for Data Science,在這基礎上加入了一些自己的理解。 Pandas 速查手冊 匯入資料 匯出資料 建立測試物件 檢視、

Python|花了一天,為大家整理的一套來自外國大佬的密碼

簡單的HTTPS伺服器     檢查證書資訊     輸出     生成自簽名證書     輸出     準備

14張高清Python資料科學家(資料分析&機器學習)程式碼,提升效率必備!【可下載】...

歡迎關注天善智慧,我們是專注於商業智慧BI,人工智慧AI,大資料分析與挖掘領域的垂直社群,學習,問答、求職一站式搞定! 對商業智慧BI、大資料分析挖掘、機器學習,python,R等資料領域感興趣的同學加微信:tsaiedu,並註明訊息來源,邀請你進入資料愛好者交流群,資料愛好者們都

HTML實體符號代碼(轉載)

plus tro agg 小於號 times 問號 大於號 豎線 table 1.特色的 ? © ? 版權標誌 | | 豎線,常用作菜單或導航中的分隔符 · · · 圓點,有時被用來作為菜單分隔符 ↑ &

常用正則表達式

tle 效果 table 邏輯 改變 小寫 body 換行符 特殊 元字符(配匹字符串用) 字符 補集(相反的) . 除換行符(\n)以外的任意字符 \n(換行) \w 單詞字符 (指大小寫字母、0-9的數字、下劃線、漢字) \W \d 數字(0-

排序算法復雜度

排序 table borde apt 長度 d+ itl ont 時間復雜度 各種常用排序算法 類別 排序方法 時間復雜度 空間復雜度 穩定性 平均情況 最好情況 最壞情況 輔助存儲 插入排序 直接插入 O(n2) O

Git 常用命令

rtl stage 協議 發布 orm parse 不同 交互 row p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify } a:link { color: r

windows端口號

ram 網絡驗證 hot col deep 2個 smtps fse nbsp windows端口號速查表 1 tcpmux TCP 端口服務多路復用 5 rje 遠程作業入口 7 echo Echo 服務 9 discard 用於連接測試的空服務

vim基本命令

bsp 編譯 cmd index sea print sheet 自動 eas 來源:https://github.com/skywind3000/awesome-cheatsheets/blob/master/editors/vim.txt ##############

bash基本命令

參數 whois 初始 去重排序 example acer 特定 http 移除 來源:https://github.com/skywind3000/awesome-cheatsheets/blob/master/languages/bash.sh #########

Git 常用命令(圖文+表格)

祖先 pda 數量 ply o-c 有用 github map align 一、 Git 常用命令速查 git branch 查看本地所有分支git status 查看當前狀態 git commit 提交 git branch -a 查看所有的分支git branch -r

Boost Python官方(一)

library OS get hpa mkdir 成員 ubun int AR 配置環境 $ cat /etc/os-release NAME="Ubuntu" VERSION="16.04 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=deb

Git 命令

調用 屬性 -i width 相同 命令 body 用戶 lam Git 命令速查表 1、常用的Git命令 命令 簡要說明 git add 添加至暫存區 git add–interactive 交互式添加 git appl

正則表達式

對象 之間 貪婪模式 ali 存儲 enter 整數 ood 條件 正則表達式速查表 字符描述 \ 將下一個字符標記為一個特殊字符、或一個原義字符、或一個向後引用、或一個八進制轉義符。例如,“n"匹配字符"n"。"\n"匹配一個換行符。串行"\\"

【轉】Vim-幫你提高N倍效率

name 娛樂 描述 類型 輸出 打開文件 搜索命令 note 小寫 Vim速查表-幫你提高N倍效率 轉自:https://www.jianshu.com/p/6aa2e0e39f99 去年上半年開始全面使用linux進行開發和娛樂了,現在已經回不去windows了

資料處理

Python資料科學速查表 - Python 基礎   Python資料科學速查表 - 匯入資料   Python資料科學速查表 - Jupyter Notebook   資料處理系列推出的內容包括:Numpy、Pandas 及 SciPy: