使用pandas做數據分析,掌握這些函數就夠了

2020-12-15 趣談數據分析

pandas是數據分析師最常用的工具之一,掌握以下函數足以應對工作中的各種需求,

P4 數據集描述P5 重命名列名稱P6 刪除列P7 整體排序P8 通過列條件篩選數據P9 多條件篩選P11 怎樣使用axis參數P12 字符串方法P13 改變數據類型P14 什麼時候使用groupbyP15 探索seriesP16 處理缺失值P17 關於indexP18 選擇多行或多列P21 減少dataframe佔用內存P24 創建虛擬變量(one-hot編碼)P25 時間欄位處理P26 去除重複項P27 怎樣避免SettingWithCopyWarmingP28 改變顯示選項P29 創建Dateframe的方式P30 對DataFrame或Series使用函數P4 數據集描述

df.describe() df.describe(include=['object'])df.shapedf.dtypesP5 重命名列名稱

df.columnsdf.rename(columns={'name1':'rename1', 'name2':'rename2'}, inplace=True)df_newcolumns = ['rename1', 'rename2']df.columns = df_newcolumns# 替換列名中的字符df.columns = df.columns.str.replace(' ', '_')P6 刪除列

df.drop('name1', axis=1, inplace=True) # axis=1 列df.drop(['name1','name2'], axis=1, inplace=True)P7 整體排序

df['name1'].sort_values(ascending=False) # ascending=False 倒序df.sort_values('name', ascending=False)df.sort_values(['name1','name2'], ascending=False)P8 通過列條件篩選數據

df[df.age>20]df.loc[df.age>20, 'name1']P9 多條件篩選

df[(df.name1>10) & (df.name2<0)]df[(df.name1>10) | (df.name2<0)]df[df.name1.isin(['key1', 'key2', 'key3'])]P11 怎樣使用axis參數

df.drop('name',axis=1)df.mean(axis=0) # 每列的均值df.mean(axis=1) # 每行的均值

P12 字符串方法

# name1列轉大寫df.name1.str.upper()df.name1.str.contain('hah') # 返回True/Falsedf[df.name1.str.contain('hah')] # 用於篩選P13 改變數據類型

df.name = df.name.astype(float)df = pd.read_csv(dtype={'name1':float})# 布爾型裝換位0、1df.name1.astype(int)P14 什麼時候使用groupby

df.groupby('name1').name2.mean()df.groupby('name1').name2.agg(['count','mean', 'max', 'min'])df.groupby('name1').mean() # 得到所有列的均值對每列使用不同的聚合函數怎麼做

P15 探索series

# 一列中每個元素的數量df.name.value_counts() # 默認不計算缺失值,如果要計算需要(dropna=False)# 一列中每個元素的佔比df.name.value_counts(normalize=True)# 一列中每個元素df.name.unique()# 一列中元素數量df.name.nunique()pd.crosstab(df.name1, df.name2) # 價差表P16 處理缺失值

# 查看是否是缺失值df.isnull()/df.notnull()# 查看每個特徵缺失值數量df.isnull().sum()df.dropna(how='any') # 刪除所有包含缺失值的行df.dropna(how='all') # 刪除所有值都是缺失值的行df.dropna(subset=['name1', 'name2'], how='any') # 刪除這兩列中包含缺失值的行# 填充缺失值df['name'] = df['name'].fillna(value='hah', inplace=True)P17 關於index

# 重置indexdf.set_index('name1', inplace=True)df.reset_index(inplace=True)# 改變index的namedf.index.name = Nonedf.index.name = 'hdah'pd.concat([df1, series1], axis=1) # 可以合併dataframe和seriesP18 選擇多行或多列

df.loc # 使用標籤名稱df.loc[1:3,:] # 包含1和3df.iloc # 使用位置df.iloc[1:3,:] # 包含1不包含3P21 減少dataframe佔用內存

# 查看個欄位佔用內存df.memory_usage(deep=True)# 為object加上自定義大小順序df['name'] = df['name'].astype('category', categories=['good', 'good1', 'good2'], ordered=True)P24 創建虛擬變量(one-hot編碼)

df['new_name'] = df.name.map({'x':1, 'y':2}) # 把name列中的x改為1,y改為2pandas.get_dummies(df.sex, prefix='sex') # 離散特徵重新編碼,以x開頭pandas.get_dummies(df, columns=['name1', 'name2'], drop_first=True) # drop_first參數默認為False,刪除結果中的第一列。P25 時間欄位處理

# 字符串切片df.name1.str.slice(-5,-3)# 日期處理函數df['time'] = pd.to_datetime(df.time)# 其他方法(.dt.)df.time.dt.weekday or weekday_name 返回周幾df.time.dt.dayofyear 返回一年中的第幾天# 作為篩選條件ts = pd.to_datetime('1/1/2019')df.loc[df.times>ts, :]# 日期之間的數學計算(df.times.max() - df.times.min()).daysP26 去除重複項

# 重複個數df.name.dumplicated().sum()df.dumplicated().sum()# 重複項明細df.loc[df.dumplicated(keep=False), :] keep參數,False全部顯示,first顯示做後一個,last顯示第一個;# 刪除重複想df.drop_dumplicates(keep=last)df.drop_dumplicates(subset=['name1', 'name2'])

P27 怎樣避免SettingWithCopyWarming

儘量使用loc,避免直接copy經過多級篩選之後,pandas不確定當前Dateframe是否是copy過來的,所以,對當前dateframe操作時,不確定是否為影響最初的數據集,而爆出SettingWithCopyWarming,可以在最初拷貝數據集的時候使用copy方法;P28 改變顯示選項

主要方法 pandas.get_option()顯示所有行pd.set_option('display.max_rows', None)默認顯示60行pd.set_option('display.max_rows', None)其他選項最大列數:display.max_columns最大單元格寬度:display.max_colwidth小數點位數:display.precision查看目前選項:pd.describe_option()pd.describe_option('rows')重置所有默認選項pd.reset_option('all')P29 創建Dateframe的方式

1 字典pd.DataFrame({'id':[1,2,3], 'name':['hah','jjj','kk']}, columns=['id2', 'name2'], index=['x','y','z'])2 列表pd.DataFrame([[1,2,3], ['x','v','b'], [1,'5','x']]) 一個子列表為一行3 使用numpyarr = np.random.rand(4,2) 4行2列pd.DataFrame(arr)4 字典結合numpypd.DataFrame({'id':np.arrange(100,110,1), 'name':np.random.randint(60, 101,10)})5 連接DataFrame和Series'pd.concat([df,s], axis=1)P30 對DataFrame或Series使用函數

mapdf['name1'] = df.name.map({'x':1, 'y':2}) applydf[name1] = df.name,apply(len)df[name1] = df.name,apply(np.ciel)def fun(x,y): return x[y]df.name.apply(fun, y=2df.apply(max, axis=0) 每一列的最大值df.apply(max, axis=1) 每一行的最大值df.apply(np.argmax, axis=1) 每一行的最大值對應的列名applymap 針對全局每一個單元格做操作df.applymap(float)

相關焦點

  • 使用Pandas數據處理與分析
    前言:這是關於個人關於對pandas可以進行的數據處理和數據分析的見解的初版,其中肯定不乏一些錯誤之處,希望大家能多多指正。pandas提供了一些用於將表格型數據讀取為DataFrame對象的函數。這些pandas的解析函數參數較為複雜,具體了解可以在pandas官網上自行查閱,或者可以再Jupyter Notebook 中採用help(pd.read_excel)命令查閱。2.審閱數據在成功導入數據以後,需要對數據進行審閱,目的是,了解數據結構、類型、大小等情況。
  • Python數據分析之pandas數據讀寫
    本節將學習pandas從多種存儲媒介(比如文件和資料庫)讀取數據的工具,還將學到直接將不同的數據結構寫入不同格式文件的方法,而無需過多考慮所使用的技術。本節的主要內容為pandas的多種I/O API函數,它們為大多數常用格式的數據作為DataFrame對象進行讀寫提供了很大便利。
  • 使用Pandas進行數據處理
    引言我們將深入講解pandas庫在數據處理階段的功能數據處理又可以細分為三個階段,我們將通過例子詳細講解各個階段都會涉及哪些操作,以及如何充分利用pandas庫提供的函數來完成這些操作。數據準備階段包括以下步驟:1.加載 2.組裝:合併、拼接、組合 3.變形 4.刪除說到數據加載,我們的方法之前都有過介紹,大家可以根據方法自行百度進行相關的函數的使用。在加載階段也有部分數據準備的工作,以把很多不同格式的數據轉換為DataFrame等結構。
  • 數據分析工具篇——pandas高效函數
    接上篇文章,我們把pandas的常用方法做深一步分解,上文我們主要描述了類SQL的查詢功能,本文我們來了解一下剩下的刪、改操作和一些高效的函數
  • 未明學院:7張思維導圖掌握數據分析關鍵庫pandas
    原創: 未明學院Pandas是一個強大的分析結構化數據的工具集;它基於numpy,用於數據分析和數據挖掘,同時也提供數據清洗功能。pandas與numpy一起構成了數據分析的基礎雙生庫。pandas概述02在使用pandas做數據分析的時候往往第一步就是將數據導入進來,比如csv或者excel格式的數據,下面這張圖就是我們讀取數據時候的方法和參數。
  • 【數據分析】Pandas
    其他常用方法                ✦ ✦ ✦ ✦ ✦ ✦1、簡介pandas是一個強大的Python數據分析的工具包,它是基於Numpy構建的,正因pandas的出現5、數據分組和聚合在數據分析當中,我們有時需要將數據拆分,然後在每一個特定的組裡進行運算,這些操作通常也是數據分析工作中的重要環節。
  • 使用pandas分析1976年至2010年的美國大選的投票數據
    我將使用pandas庫進行數據分析和可視化,因此這也是使用pandas的函數和方法的良好實踐。讓我們從導入庫並將數據集讀入一個Pandas dataframe開始。,所以這些列在分析方面是多餘的,因此可以刪除它們。
  • pandas指南:做更高效的數據科學家
    pandas類似於Python中的Excel:它使用表(即DataFrame)並對數據進行轉換,但它還能做更多。我通常不使用其他函數,比如to_excel,to_json,to_pickle,to_csv,雖然它們也做得很好,但是csv是保存表最常用的方法。3、檢查數據:.head(3)列印數據的前3行,.tail()函數將查看數據的最後一行。
  • 使用Pandas的resample函數處理時間序列數據的技巧
    通常,可能會對將時序數據重新採樣到要分析數據的頻率或從數據中汲取更多見解的頻率感興趣。在本文中,我們將介紹一些使用Pandas resample()函數對時間序列數據進行重採樣的示例。我們將介紹以下常見問題,並應幫助您開始使用時序數據操作。
  • 《pandas數據讀取》
    今天呢就給大家分享一個數據分析裡面的基礎內容之pandas數據讀取 數據讀取是進行數據預處理,建模與分析的前提,不同的數據源
  • Python數據分析:pandas讀取和寫入數據
    我的公眾號是關於自己在數據分析/挖掘學習過程中的一些技術和總結分享,文章會持續更新......繼續深入學習pandas相關操作,數據讀取寫入、分組、合併,轉換等等。前面一篇文章裡已經寫了關於描述性統計以及常用的基本操作。接下來的一段時間裡,我將陸續地去掌握並輸出。這篇文章是關於數據讀取與寫入的知識點。
  • Python數學建模技巧之pandas數據處理
    既然提前將數據集公布了出來,準備做C題的隊伍肯定都是會在賽前就將數據集進行一些基本的預處理,包括數據清洗、數據集成、數據轉換、數據規約、數據離散化等操作,甚至在不知道題目的情況下就嘗試著用一些數據挖掘的算法去試圖發現一些數據集中所包含的潛在規律。基本工具Excel肯定沒法去完成這些複雜的數據處理任務,而用matlab去完成這些任務的話,又會極為繁瑣複雜和不方便。
  • 實戰 :圖說Pandas中旋轉和重塑函數
    本文通過圖例的方式,舉例說明了pandas中旋轉(pivot)和重塑(reshape)函數的實現方式。我喜歡使用python的pandas包進行數據分析。10分鐘掌握pandas(https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html)一旦掌握了基本原理,並開始使用重塑函數和透視表,事情就變得有趣多了。之前的文章展示了一些更有趣的數據重塑函數,下面是一些與pandas重塑相關的圖例:
  • python時間序列分析之_用pandas中的rolling函數計算時間窗口數據
    上篇文章中,我們講解了如何對時間數據進行重採樣及重採樣中降採樣和升採樣的概覽和使用方法,通過重採樣我們可以得到任何想要頻率的數據,但是這些數據也是一個時點的數據,那麼就存在這樣一個問題:時點的數據波動較大,某一點的數據不能很好的表現它本身的特性,於是我們就想,能否用一個區間的的數據去表現呢,這樣數據的準確性是不是更好一些呢?
  • 使用pandas進行文件讀寫
    pandas是數據分析的利器,既然是處理數據,首先要做的當然是從文件中將數據讀取進來。
  • 再見Numpy,Pandas!又一個數據分析神器橫空出現!
    ,想必大家都或多或少的有一定的了解,常見的像是numpy和pandas更是大家日常使用的數據分析工具。但是面對大數據的處理時,像是numpy和pandas的在加載數據時,會看到內存用量的飆升,而dask卻可以將這些大的數據進行並行計算。今天小編就帶領大家學習一個並行的計算庫——dask。
  • Pandas數據清洗系列:read_csv函數詳解(一)
    我們平時做數據分析或挖掘,第一步就是獲取數據。不像做科研需要親自收集數據,日常工作中的數據都是現成的,存儲在資料庫或者文本文件中。我們首先需要做的就是從資料庫或者文本文件中將數據讀取到Python中,然後再進行後續的分析。在文本文件中,逗號分隔符文件(csv文件,指的是數據列之間使用逗號分隔,當然也可以不是逗號)可以說是最常見的一種了。
  • python數據分析萬字乾貨!一個數據集全方位解讀pandas
    說到python與數據分析,那肯定少不了pandas的身影,本文希望通過分析經典的NBA數據集來系統的全方位講解pandas包,建議搭配IDE一遍敲一邊讀哦。話不多說,開始吧!>對列進行操作指定數據類型數據清洗數據可視化pandas的安裝建議直接安裝anaconda,會預置安裝好所有數據分析相關的包,當然也可以使用pip安裝。
  • 如何使用Pandas-Profiling進行探索性數據分析
    當開始一個新的機器學習項目時,獲得機器學習數據集之後的第一步就是要了解它。我們可以通過執行探索性數據分析(EDA)來實現這一點。這包括找出每個變量的數據類型、目標變量的分布、每個預測變量的不同值的數量、數據集中是否有重複值或缺失值等。進行EDA探索機器學習數據集的過程往往是非常耗時的。什麼是Pandas-Profiling?
  • 深度學習數據分析好搭檔!12個高頻使用的Numpy和Pandas函數
    ,以及強大的數據分析庫。二者在日常的數據分析中都發揮著重要作用,如果沒有 Numpy 和 Pandas 的支持,數據分析將變得異常困難。但有時我們需要加快數據分析的速度,有什麼辦法可以幫助到我們嗎?在本文中,數據和分析工程師 Kunal Dhariwal 為我們介紹了 12 種 Numpy 和 Pandas 函數,這些高效的函數會令數據分析更為容易、便捷。