python表格數據分類聚合_3-python數據分析-pandas高級操作之替換、映射、隨機抽樣、分組、高級數據聚合、數據加載、透視表、交叉表...

3-python數據分析-pandas高級操作之替換、映射、隨機抽樣、分組、高級數據聚合、數據加載、透視表、交叉表

替換操作 replace

替換操作可以同步作用于Series和DataFrame中

單值替換

普通替換: 替換所有符合要求的元素:to_replace=15,value=’e’

按列指定單值替換: to_replace={列標簽:替換值} value=’value’

多值替換

列表替換: to_replace=[] value=[]

字典替換(推薦) to_replace={to_replace:value,to_replace:value}

單值替換

df = DataFrame(data=np.random.randint(0,50,size=(7,5)))

#普通替換

df.replace(to_replace=7, value='seven')

#按列指定單值替換

df.replace(to_replace={0:7}, value='seven')

多值替換

#字典替換(推薦使用)

df.replace(to_replace={7:"seven",40:"四十"})#列表替換

df.replace(to_replace=[7,40],value=['seven','四十'])

映射操作 map

map是Series的方法,只能被Series調用

概念:創建一個映射關系列表,把values元素和一個特定的標簽或者字符串綁定(給一個元素值提供不同的表現形式)

創建一個df,兩列分別是姓名和薪資,然后給其名字起對應的英文名

dic ={'name':['jay','tom','jay'],'salary':[1000,2000,1000]

}

df= DataFrame(data=dic)

#給jay和tom起兩個中文名字#映射關系表:表明了映射關系

dic ={'jay':'張三','tom':'李四'}

df['c_name'] = df['name'].map(dic)

運算工具

Series的方法apply也可以像map一樣充當運算工具

定義一個方法將它放到map或apply方法中,會將Series中每個元素傳到函數中

apply充當運算工具效率要遠遠高于map,并且apply既可以用在Series也可以用在DataFrame

超過300部分的錢繳納50%的稅,計算每個人的稅后薪資

defafter_salary(s):if s > 300:return s - (s-300) * 0.5

returns

df['after_salary'] = df['salary'].map(after_salary)

df['salary'].apply(after_salary)

0650.0

1 1150.0

2 650.0Name: salary, dtype: float64

隨機抽樣 take

take()? task中的axis參數含義和drop系列的函數一致

np.random.permutation( n)? 返回0到n-1之間的亂序序列

df = DataFrame(data=np.random.randint(0,100,size=(100,3)),columns=['A','B','C'])

np.random.permutation(3) #返回0-2之間的亂序序列

array([2, 0, 1])#對原始數據進行打亂,打亂:是對索引打亂#對行列索引進行打亂并進行隨機抽樣抽取前10個

df.take(indices=np.random.permutation(3),axis=1).take(indices=np.random.permutation(100),axis=0)[0:10]

數據的分類處理 分組groupby

數據分類處理的核心:

groupby()函數可以進行分組

groups屬性可以查看分組情況

df = DataFrame({'item':['Apple','Banana','Orange','Banana','Orange','Apple'],'price':[4,3,3,2.5,4,2],'color':['red','yellow','yellow','green','green','green'],'weight':[12,20,50,30,20,44]})

#by 提供了分組條件,通過水果的種類進行分組

df.groupby(by='item')

#查看分組結果

df.groupby(by='item').groups

{'Apple': Int64Index([0, 5], dtype='int64'),'Banana': Int64Index([1, 3], dtype='int64'),'Orange': Int64Index([2, 4], dtype='int64')}

分組聚合

分組的目的就是為了后續對各個小組的聚合計算

計算每一種水果的平均價格

#計算每一種水果的平均價格

df.groupby('item').mean()['price']#不推薦使用上面這種,進行了多余計算,浪費運算成本,# 推薦使用下邊這種

df.groupby(by='item')['price'].mean()

item

Apple3.00Banana2.75Orange3.50Name: price, dtype: float64

將每一種水果的平均價格計算出來然后匯總到源數據中

mean_price = df.groupby('item').mean()['price']#直接將其轉成字典

mean_price_dic =mean_price.to_dict()

{'Apple': 3.0, 'Banana': 2.75, 'Orange': 3.5}#通過映射,映射到原數據

df['mean_price'] = df['item'].map(mean_price_dic)

求出每一種顏色水果的平均重量,將其匯總到源數據中

#通過color分組計算平均重量并轉成字典,通過color映射匯總到原數據

df['color_mean_weight'] = df['color'].map(df.groupby(by='color')['weight'].mean().to_dict())

高級數據聚合

使用groupby分組后,也可以使用transform和apply提供自定義函數實現更多的運算

df.groupby(‘item’)[‘price’].sum() <==> df.groupby(‘item’)[‘price’].apply(sum)

transform和apply都會進行運算,在transform或者apply中傳入函數即可

transform和apply也可以傳入一個lambda表達式

apply和transform的區別:

transform返回的結果是經過映射后的結果

apply返回的是沒有經過映射的結果

#定義的方法需要作用到運算工具中

def my_mean(s): #s是一組數據

sum =0for i ins:

sum+=ireturn sum /len(s)#transform和apply就是運算工具

#transform返回的是映射后的結果,直接可以匯總到原數據

df.groupby(by='item')['price'].transform(my_mean)

03.00

1 2.75

2 3.50

3 2.75

4 3.50

5 3.00Name: price, dtype: float64#apply返回的是沒有映射的結果,需要通過map映射才能匯總到原數據

df.groupby('item')['price'].apply(my_mean)

item

Apple3.00Banana2.75Orange3.50Name: price, dtype: float64

數據加載

讀取type-.txt文件數據

header 參數header默認是將數據第一行作為列索引,指定None后使用隱式索引

sep 參數sep指定數據通過什么分割

pd.read_csv('./data/type-.txt')

# 指定header等于None不使用第一行作列索引,使用隱式索引pd.read_csv('./data/type-.txt', header=None)

# 指定sep通過"-"分割數據pd.read_csv('./data/type-.txt', header=None, sep='-')

讀取數據庫中的數據

#連接數據庫,獲取連接對象

importsqlite3

conn= sqlite3.connect('./data/weather_2012.sqlite')#讀取庫表中的數據值, 參數(sql語句,連接對象)

pd.read_sql('select * from weather_2012', conn)#將數據寫入數據庫,參數(表名,連接對象)

text_df.to_sql('text_df', conn)

pd.read_sql('select * from text_df', conn)

透視表?pivot_table

透視表是一種可以對數據動態排布并且分類匯總的表格格式。在pandas中數據透視表被稱作pivot_table。

透視表的優點:

靈活性高,可以隨意定制你的分析計算要求

脈絡清晰易于理解數據

操作性強,報表神器

pivot_table有四個最重要的參數index、values、columns、aggfunc

數據讀取

#需要指定引擎和編碼,否則會報錯亂碼

df = pd.read_csv('./data/透視表-籃球賽.csv', engine='python', encoding='utf-8')

index參數

分類匯總的分類條件,每個pivot_table必須擁有一個index

#想看看哈登對陣同一對手在不同主客場下的數據,分類條件為對手和主客場

df.pivot_table(index=['對手','主客場'])

values參數

對計算的數據進行篩選

#如果我們只需要哈登在主客場和不同勝負情況下的得分、籃板與助攻三項數據

df.pivot_table(index=['主客場','勝負'],values=['得分','籃板','助攻'])

aggfunc參數

設置對數據聚合時使用的函數

當我們未設置aggfunc時,它默認aggfunc=’mean’計算均值

#想獲得哈登在主客場和不同勝負情況下的總得分、總籃板、總助攻時:#將aggfunc參數設為sum,就是對數據求和

df.pivot_table(index=['主客場','勝負'],values=['得分','籃板','助攻'], aggfunc='sum')

columns參數

設置列層次字段, 對values字段進行分類

#獲取所有隊主客場的總得分

df.pivot_table(index='主客場',values='得分', aggfunc='sum')

#查看主客場下的總得分的組成元素是誰

df.pivot_table(index='主客場', values='得分', aggfunc='sum', columns='對手')

#fill_value 將空值填充

df.pivot_table(index='主客場', values='得分', aggfunc='sum', columns='對手',fill_value=0)

交叉表?crosstab

是一種用于計算分組的特殊透視圖,對數據進行匯總

pd.crosstab(index,colums)

index:分組數據,交叉表的行索引

columns:交叉表的列索引

df = DataFrame({'sex':['man','man','women','women','man','women','man','women','women'],'age':[15,23,25,17,35,57,24,31,22],'smoke':[True,False,False,True,True,False,False,True,False],'height':[168,179,181,166,173,178,188,190,160]})

#求出各個性別抽煙的人數

pd.crosstab(index=df.smoke,columns=df.sex)

#求出各個年齡段抽煙人情況

pd.crosstab(index=df.age, columns=df.smoke)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538452.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538452.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538452.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle-SQL-case when 改用 DECODE

SELECT CASE FLOOR_LINE_ID WHEN 1 THEN 高鐵 WHEN 2 THEN 高速 WHEN 3 THEN 公路 WHEN 5 THEN 地鐵 ELSE 其他 END AS LINE_NAME, FLOOR_LINE_ID FROM ( SELECT FLOOR(LINE_ID/100) AS FLOOR_LINE_ID FROM DT4_LINE_NAME ) 改…

lcp mysql cluster_Mysql Cluster 非root用戶啟動ndbd節點報錯

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓1.配置文件&#xff0c;如下&#xff1a;[rootcent178 ~]# ls -lart /etc/my.cnf-rw-rw-r-- 1 mysql mysql 3055 Oct 31 17:29 /etc/my.cnf2.集群數據存儲文件夾&#xff0c;如下&#xff1a;[rootcent178 ~]# ls -lart /var/lib/m…

fatal: Could not read from remote repository.的解決辦法

原文地址&#xff1a;http://blog.csdn.net/huahua78/article/details/52330792 --------------------------------------------------------------------------------- 查看遠端地址 git remote –v 查看配置 git config --list git status git add . // 暫存所有的更改git…

python中mako中loop_python中Mako庫實例用法

Mako是一個模板庫。一種嵌入式的語言&#xff0c;能夠實現簡化組件布局以及繼承&#xff0c;主要的用途也是和作用域有關&#xff0c;但是效果是最直接切靈活的&#xff0c;這些都是mako的基本功能&#xff0c;掌握了基礎內容&#xff0c;接下來就是詳細的了解講述&#xff0c;…

springmvc是什么_SpringBoot與SpringMVC的區別是什么?

簡單的來說&#xff1a;SpringMVC和SpringBoot都是Spring家族的重要成員。Spring家族的使命就是為了簡化而生。SpringMVC簡化我們日常Web開發的&#xff0c;后來隨著自身的發展&#xff0c;SpringMVC變得臃腫復雜&#xff0c;而SpringBoot則進一步簡化了SpringMVC開發。SpringM…

git 上傳代碼到碼云

與碼云建立連接教程&#xff1a;http://blog.csdn.net/zengmingen/article/details/76045076 如果完成了上面步驟的&#xff0c;且有了git。上傳項目步驟&#xff1a; 代碼提交 代碼提交一般有五個步驟&#xff1a; 1.查看目前代碼的修改狀態 2.查看代碼修改內容 3.暫存需要提交…

你不知道的js中關于this綁定機制的解析[看完還不懂算我輸]

前言 最近正在看《你不知道的JavaScript》&#xff0c;里面關于this綁定機制的部分講的特別好&#xff0c;很清晰&#xff0c;這部分對我們js的使用也是相當關鍵的&#xff0c;并且這也是一個面試的高頻考點&#xff0c;所以整理一篇文章分享一下這部分的內容&#xff0c;相信看…

visual studio過期登錄不了賬戶_具有最高管理權限賬戶,Windows 7設置Administrator密碼永不過期...

今天介紹操作系統具有最高管理權限的賬戶&#xff0c;Windows 7如何設置Administrator賬戶密碼永不過期。小伙伴們可能不知道&#xff0c;和Windows Vista操作系統一樣&#xff0c;在Windows 7操作系統中是不能預先使用Administrator這個具有最高管理權限的賬戶的。同時也可能不…

Tomcat安裝與環境變量的配置-Linux+windows

原文鏈接&#xff1a;http://jingyan.baidu.com/article/8065f87fcc0f182330249841.html ------------------------------------------------------------ 1&#xff0c;新建變量名&#xff1a;JAVA_HOME&#xff0c;變量值&#xff1a;C:\Program Files\Java\jdk1.7.0 2&…

python如何讀取配置文件獲取url以及hhead_讀取INI配置文件內容(頭文件head)

/************************************************************FileName: getini.h // 文件名稱Author: yuanfen127 // 作者Date: 2005-03-31 // 日期Description: // 描述本文件的內容,功能,內部各部分之間的關系// 以及文本文件與…

cad隱藏圖層命令快捷鍵_cad快捷鍵f是什么命令?cad中f快捷鍵都有哪些?

1. F1 該功能鍵打開AutoCAD幫助窗口。如果用戶遇到此軟件中的任何功能問題,它可以使用戶在線獲得幫助。如果用戶離線工作,而不是按此鍵,則該軟件的所有功能都將以PDF格式打開。 2. F2 該鍵將打開一個彈出屏幕,在底部顯示命令行。該命令對于在屏幕底部看不到命令窗口的用戶很…

angular2或4部署到tomcat中,讓他跑起來

原文地址&#xff1a;http://blog.csdn.net/rotating_windmill/article/details/76768793 ------------------------------------------------------------------------- 首先使用構建命令(npm run build或ng build)打包&#xff0c;打包完成后項目中會出現一個dist的目錄&…

java 高級編程進階_JAVA高級編程之hibernate進階學習

二級緩存hibernate的session緩存在事務級別進行持久化數據的緩存操作。 當然&#xff0c;也有可能分別為每個類(或集合)&#xff0c;配置集群、或 JVM 級別(SessionFactory 級別)的緩存。你甚至可以為之插入一個集群的緩存。注意&#xff0c;緩存永遠不知道其他應用程序對持久化…

SpringMvc+Tomcat+Angular4 部署運行

這次的團隊開發是&#xff0c;前端開發人員和后臺開發人員完全分開開發的。 前端開發采用了Angular4&#xff0c;webstorm 后端開發采用了&#xff1a;springspringmvcmybatis&#xff0c;eclipse --------------------------------------- 最后要整合了。 1、angular項目編…

python爬蟲本科容易找工作嗎_python爬蟲基礎學完了,我真的能找到一份工作嗎?...

1.能不能找到工作我覺得取決于你技術掌握的程度。2.無論在什么領域&#xff0c;只要你技術到家&#xff0c;都不用愁找不到工作。3.多數人問他們轉行能不能找到工作&#xff0c;是想知道這個崗位需要的人多不多&#xff0c;在爬蟲這個領域&#xff0c;從事這方面的人應該也不少…

jqgrid demo java_java – jqgrid如何顯示服務器端消息

我使用jqGrid以表格格式顯示數據,使用JSP和servlet.編輯我想在執行插入,更新,刪除等操作時顯示來自服務器的錯誤. (數據類型&#xff1a;“xml”)jqGrid的jQuery("#list10_d").jqGrid({height:250,width:600,url:Assignment?actionAssign,datatype: "xml"…

IPv4地址分類及特征

IPv4地址分類及特征 IP地址后斜杠和數字代表的意思 其中有這樣一個IP地址的格式&#xff1a;IP/數字&#xff0c;例如&#xff1a;111.222.111.222/24這種格式平時在內網中用的不多&#xff0c;所以一下子看不懂&#xff0c;最后查了資料才知斜杠后的數字代表的是掩碼的位數 “…

查看Scala編譯的.class文件

Scala是基于JDK運行的&#xff0c;必然會生成Java的字節碼文件.class文件。 如何查看&#xff1f; 編碼IDE&#xff1a;IntelliJ IDEA 2017.2 x64 查看class文件工具&#xff1a;jd-gui scala代碼如下&#xff1a; person.scala package cn.zengmg.day26class Person {val …

python傳文件給堡壘機上遠程的另一個機器_如何用hive調度堡壘機上的python腳本...

工作中&#xff0c;如果我們本地要操作的數據量大&#xff0c;那么主機是跑不起來python腳本的&#xff0c;這個時候&#xff0c;就要用到服務器(也叫堡壘機)了。那么如何用HIVE調用堡壘機上的python腳本呢&#xff1f;今天小白就總結一下步驟和一些注意事項~1.首先將Python腳本…

SecureCRT如何導出導入配置文件

以SecureCRT7.2.5為例 Options-----Global Options -----General -----Configuration Paths 備份&#xff1a; 進入該文件夾&#xff0c;復制里面的內容到要備份的地方 還原&#xff1a; 將上面的復制的文件&#xff0c;拷貝到 Configuration Paths 下