日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pandas的一些理解

發布時間:2023/12/16 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pandas的一些理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

pandas 簡介

numpy 能夠幫我們處理的是 數值型數據,但是這還不夠,很多時候,我們的數據除了數值之外,還有字符串,還有時間序列等,
這是就需要 pandas 幫我們處理它們了。
什么是Pandas?
Pandas的名稱來自于面板數據(panel data)
Pandas是一個強大的分析結構化數據的工具集,基于NumPy構建,提供了高級數據結構和數據操作工具,它是使Python成為強大而高效的數據分析環境的重要因素之一。
。一個強大的分析和操作大型結構化數據集所需的工具集
。基礎是NumPy,提供了高性能矩陣的運算
。提供了大量能夠快速便捷地處理數據的函數和方法
。應用于數據挖掘,數據分析
。提供數據清洗功能

pandas 的數據結構

pandas 庫有兩個重要的數據結構:

  • Series 系列 [?s??ri?z]
  • DataFrame Frame [fre?m] 框架
  • 我們可以將 Series 看作顯示了索引的一維數組,將 DataFrame 看作顯示了縱橫軸索引的二維數組,因此 numpy 的許多方法與函數可以用在 Series 與 DataFrame 上。

    Series對象

    我們首先來了解 Series ,因為 Pandas 是基于NumPy構建的,所以我們可以參考 一維數組 對象來理解 Series對象。

    import numpy as np import pandas as pd list_1=list(range(1,6)) arr=np.array(list_1) ser=pd.Series(list_1) print(f'這是由 1 到 5 構成的一維數組,只有數據元素:\n{arr}') print(f'這是由 1 到 5 構成的Series對象,由數據元素及其索引:\n{ser}')

    由此我們可以更好的理解 Ndarray 對象和 Series 對象,

  • 數據類型不同:兩者都是一系列同類型數據的集合,不同之處在于 Ndarray 對象只能存儲數值型數據,而一個Series 對象中可以同時包含數值型數據;字符串和python 對象等等;
  • 兩者的索引都是由 0 開始的,不同之處在于 Series 對象的索引可以重新指定,而 Ndarray 對象的索引不能變更;且 Series 對象的索引會在內容中顯示出來,而Ndarray 對象的索引不會在內容中顯示出來。
  • Series 對象的創建:

    pandas. Series ( data , index , dtype , name , copy )

  • data:只要是數據都可以,當data的類型為字典時,鍵為索引,值作內容。
  • index:默認從零開始,當指定索引時,索引的個數要等于數據元素的個數。
  • dtype:元素的數據類型,默認會自己判斷
  • name:設置索引和元素值的名稱
    Series . name=str 設置元素值的名稱
    Series . index.name=str 設置索引的名稱
  • copy:拷貝數據,默認為 False
  • import numpy as np import pandas as pd data={'name':'張三','age':20,'class':'三班'} ser=pd.Series(data) print(ser) print('利用 Series 對象的屬性,index和values訪問其索引值與元素值:') print(ser.index) print(ser.values)

    DataFrame 對象

    DataFrame 是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 組成的字典(共同用一個索引)。可以參考 excel 表格

    DataFrame 構造方法如下:

    pandas.DataFrame( data, index, columns, dtype, copy)

    參數說明:

  • data:一組數據(ndarray、series, map, lists, dict 等類型)。
  • index:索引值,或者可以稱為行標簽,默認為 RangeIndex (0, 1, 2, …, n) 。
  • columns:列標簽,默認為 RangeIndex (0, 1, 2, …, n) 。
  • dtype:數據類型。
  • copy:拷貝數據,默認為 False。
  • Pandas DataFrame 是一個二維的數組結構,類似二維數組。
    DataFrame 的構建

    data 為字典類型:

    鍵作索引,值作內容。

  • 由數組,列表或元組構成的字典;
  • import numpy as np import pandas as pd data={'a':[1,2,3,4],'b':(4,5,6,7),'c':np.arange(9,13)} frame=pd.DataFrame(data) print(f'DataFrame對象:\n{frame}') string='''通過屬性 index 查看對象的行索引;columns查看對象列索引;values查看對象的值。''' print(string) print(f'行索引:{frame.index}') print(f'列索引:{frame.columns}') print(f'元素值:\n{frame.values}') print('指定索引:') frame=pd.DataFrame(data,index=['A','B','C','D'],columns=['a','b','c','d']) print(frame)


    2. 由 Series對象構成的字典;

    import numpy as np import pandas as pd data={'a':pd.Series(np.arange(3)),'b':pd.Series(np.arange(3,5)) } frame=pd.DataFrame(data) print(frame)

  • 由字典構成的字典;
  • import numpy as np import pandas as pd data={'a':{'apple':3.6,'banana':5.6},'b':{'apple':3,'banana':5},'c':{'apple':3.6} } frame=pd.DataFrame(data) print(frame)

    data 為列表類型:
  • data為二維數組時;
  • 由 Series對象構成的列表;
  • 由字典構成的列表;
  • import numpy as np import pandas as pd arr=np.arange(12).reshape(4,3) frame_arr=pd.DataFrame(arr) print('data為二維數組時;') print(frame_arr) list_dic=[{'apple':3.6,'banana':5.6},{'apple':3,'banana':5},{'apple':3.6}] frame_list_dic=pd.DataFrame(list_dic) print('由字典構成的列表;') print(frame_list_dic) list_ser=[pd.Series(np.random.rand(3)),pd.Series(np.random.rand(2))] frame_list_ser=pd.DataFrame(list_ser) print(f'由字典構成的列表;\n{frame_list_ser}')

    索引

    與python列表一樣,在 Series對象 和 DataFrame 對象 中我們同樣可以使用索引來進行數據的 增,刪,改,查。

    在 pandas 中索引分為以下種:

  • 位置索引:對象默認的索引,從 0 開始。Series 對象中的index 和 DataFrame對象中的 index 和 columns 都是默認從 0 開始。
  • 標簽索引:對默認索引進行指定后的索引稱為標簽索引。
  • 布爾索引:用布爾運算布爾運算充當索引,返回一個由布爾值組成的對象。
  • 切邊索引:用逗號分隔不同維度,同一維度之間通過冒號分隔切片參數 start:stop:step 來進行切片操作,位置標索引和標簽索引都可以充當切片參數。
  • import numpy as np import pandas as pd ser_1=pd.Series(['張三',24,'三班','男']) print(f'未指定索引時:\n{ser_1}') ser_2=pd.Series(['張三',24,'三班','男'],index=('name','age','class','sex')) print(f'重新編輯索引后:\n{ser_2}') arr=np.random.randint(0,12,(3,4)) df_1=pd.DataFrame(arr) print(f'未指定索引時:\n{df_1}') df_2=pd.DataFrame(arr,index=list('abc'),columns=list('ABCD')) print(f'重新編輯索引后:\n{df_2}')


    我們可以通過兩種索引來進行數據的增,刪,改,查。

    通過索引獲取元素

    因為 Pandas 是基于NumPy構建的,所以 pandas 可以使用數組的操作,可以參考數組的索引來獲取元素值。

    import numpy as np import pandas as pd data={'name':'張三','age':20,'class':'三班','sex':'男'} ser=pd.Series(data) print(f'Series對象:\n{ser}') print('獲取單個元素:') print(f'方法一通過下標 ser[1]:{ser[1]}') print(f"方法二通過標簽名 ser['age']:{ser['age']}") print('獲取多個元素:') print(f'方法一通過下標與標簽名:\n下標:ser[[1,3]]=\n{ser[[1,3]]}') print(f"標簽名:ser[['name','sex']]=\n{ser[['name','sex']]}") print(f"通過下標切片:\n{ser[0:3]}") print(f"通過標簽名切片:\n{ser['name':'sex']}")

    Series對象的常用屬性與方法

    屬性:

    Series. index
    Series.values

    作用:訪問Series對象的索引值與元素值

    import numpy as np import pandas as pd data={'name':'張三','age':20,'class':'三班'} ser=pd.Series(data) print(ser) print('利用 Series 對象的屬性,index和values訪問其索引值與元素值:') print(ser.index) print(ser.values)

    方法

    Series. isnull ( )
    Series. notnull ( )

    作用:查找缺失值,也就是 nan。

    import numpy as np import pandas as pd from pandas.core.indexes.base import Index data={'name':'張三','age':20,'class':'三班'} string='''在使用字典作為數據時, 指定索引的個數可以超出元素值的個數, 多余的索引對應值為 nan:''' print(string) ser=pd.Series(data,index=['name','age','class','sex']) print(ser) print(f'isnull()方法判斷Series對象中是否有缺失值 nan,空為True:\n{ser.isnull()}') print(f'notnull()方法與上述類似,這個是非空為True:\n{ser.notnull()}')

    Series. head ( n : int = 5)
    Series. tail ( n : int = 5)

    作用:在 Series 對象中從前面取 n 行;從后面取 n 行,默認 n = 5

    Series. unique ( ) - - - >array

    作用:去重

    Series. value_counts ( ) - - - >Series

    作用:檢查每個元素出現的次數。

    import numpy as np import pandas as pd ser=pd.Series([2,5,6,7,4,5,2,3,6,4]) print(ser) print('*'*20) print(ser.unique()) print('*'*20) print(ser.value_counts())

    DataFrame對象常見的屬性與方法

    屬性:

    DataFrame. values - - -> 返回一個二維數組
    DataFrame. index - - -> 返回一個Index對象
    DataFramecolumns - - -> 返回一個Index對象

    方法:

    apply與applymap

    DataFrame. apply ( func, axis = 0) -> DataFrame
    DataFrame. applymap ( func )-> DataFrame

  • func:函數
    apply 中應用對象中于每列或每行的函數 ;applymap中應用于對象中每個有元素的函數。
  • axis : 軸:{0或’index’,1或’columns’},默認為0
    沿其應用功能的軸:
    0或’index’:將函數應用于每個縱軸。
    1或’columns’:將函數應用于每個橫軸。
  • apply ( ) 方法同樣適用于 Series 對象。

    import numpy as np import pandas as pd df=pd.DataFrame(np.random.randn(4,3)) print(df) df=df.abs() print(f'求每個元素中的絕對值:\n{df}') f=lambda x : x.max() df_apply=df.apply(f) print(f'求每一列中的最大值:\n{df_apply}') f=lambda x:f'{x:.2f}' df_applymap=df.applymap(f) print(f'將每個元素保留兩位小數:\n{df_applymap}')

    排序方法:

  • 索引排序
  • sort_index( axis , ascending)

    axis ['?ks?s] : int, default 0
    指定軸來直接排序。對于系列,此值只能為0。
    ascending [?’send??] 升序:布爾值或布爾值列表,默認為True,當索引為多索引時,可以單獨控制每個級別的排序方向。

    import numpy as np import pandas as pd ser=pd.Series([2,1,4,3],index=list('cbda')) df=pd.DataFrame(np.arange(12).reshape(3,4),index=list('cab'),columns=list('DACB')) print(ser,df,sep='\n') print(f'按索引排序,默認升序:\n{ser.sort_index()}') print(f'按 縱 軸排序,默認升序:\n{df.sort_index()}') print(f'按 橫 軸排序,默認升序:\n{df.sort_index(axis=1)}')


    2. 按值排序

    sort_values (by , axis , ascending)

    by : str or list of str。指定要排序的名稱或名稱列表。
    作用:沿任一軸按值排序。

    import numpy as np import pandas as pd ser=pd.Series([2,1,4,3],index=list('cbda')) df=pd.DataFrame(np.random.randint(0,12,(4,3)),index=list('cabd'),columns=list('ACB')) print(ser,df,sep='\n') print(f"按值引排序,默認升序:\n{ser.sort_values()}") print(f"按值引排序,指定單軸,默認升序:\n{df.sort_values(by='A')}") print(f"按值引排序,指定多軸,默認升序:\n{df.sort_values(by=['A','B'])}")

    成員關系判斷

    isin ( values )

    參數
    values : iterable, Series, DataFrame or dict
    返回
    DataFrame of booleans 布爾型數據框
    Series of booleans 布爾型系列

    處理缺失數據的方法

  • 第一步:判斷是否存在缺失值
  • isnull ( ) - - - > DataFrame of booleans

  • 第二步:丟失缺失數據或填充缺失數據
  • dropna ( axis = 0)
    作用:丟失缺失值所在的行或列。

    fillna ( values )
    作用:將值 values 填充在 nan 值所在的位置

    簡介介紹:

  • 轉置
  • print(f'轉置之后,行列交換:\n{frame.T}')
  • 通過列索引獲取列數據( Series 類型)
  • print(f"查看其中一列frame['a']:\n{frame['a']}")
  • 增加列數據
  • frame['e']=9 frame['f']=[7,8,5,2]
  • 刪除列
  • del frame['e'] del frame['f'] import numpy as np import pandas as pd arr=np.arange(12).reshape(4,3) frame=pd.DataFrame(arr,index=['A','B','C','D'],columns=['a','c','d']) print(f'DataFrame對象:\n{frame}') print(f'轉置之后,行列交換:\n{frame.T}') print(f"查看其中一列frame['a']:\n{frame['a']}") print(f"frame['a']的類型:{type(frame['a'])}") frame['e']=9 frame['f']=[7,8,5,2] print(f"插入一列:\n{frame}") del frame['e'] del frame['f'] print(f"刪除一列:\n{frame}")

    索引操作:

    Series 和 DataFrame 中的索引都是 Index 對象。

    import numpy as np import pandas as pd arr=np.arange(12).reshape(4,3) ser=pd.Series(range(7)) frame=pd.DataFrame(arr,index=['A','B','C','D'],columns=['a','c','d']) print(f'Series對象的索引類型type(ser.index):\n{type(ser.index)}') print(f'DataFrame對象的索引類型type(frame.index):\n{type(frame.index)}') print(f'type(frame.columns): {type(frame.columns)}')

  • 重建索引:
  • Series. reindex ( )
    DataFrame. reindex ( )

  • 增:
    增加Series對象的索引:
  • Series [ new_index ] = value
    在原基礎上新增一個
    Series. append ( other_Series )
    將兩個對象合并成一個新的對象,并不改變原來的對象

    增加 DataFrame 對象的索引:

    import numpy as np import pandas as pd arr=np.arange(9).reshape(3,3) ser=pd.Series(range(5),index=['a','b','c','d','e']) frame=pd.DataFrame(arr,index=['a','b','c'],columns=['A','B','C']) print(frame) print('默認增加 列 :') frame['4']=9 frame['D']=[10,11,12] frame.insert(0,'E',[6,66,666]) print(frame) print('使用標簽索引增加 行 :') frame.loc['x']=[1,11,111,111,11,1] print(frame)

  • 刪:
  • 改:
  • 查:
  • pandas庫的一些算數方法

    pandas庫的一些統計方法

    方法說明
    count非NA值的個數
    min , max最小值與最大值
    idxmin , idxmax最小值與最大值的索引值
    sum , mean總和與平均數
    var , std樣本值的方差與標準差
    cumsum樣本值的累計和
    cumprod樣本值的累計積
    cummin , cummax樣本值的累計最大值和最小值
    describe計算匯總統計

    參數:

  • axis = 0 按縱軸求,默認為0;axis = 1 按橫軸求。
  • skipna = True,跳過缺失值。
  • pandas庫的一些算術方法

    方法描述
    add , radd加法(+)
    sub , rsub減法(-)
    div , rdiv除法(/)
    floordiv , rfloordiv整除(//)
    mul , rmul乘法(*)
    pow , rpow冪次方(**)

    參數

    • fill_value:填充值,將na值填充掉

    r:r 代表者翻轉,即參數位置互換,除數變成被除數;被除數變成除數。

    pandas庫中數據的加載與存儲

    從電腦中讀取CSV文件:

    方法說名
    read_csv ( )從文件對象中加載帶分隔符的數據,默認逗號為分割符
    read_table ( )從文件對象中加載帶分隔符的數據,默認制表符為分割符
    read_excel ( )從 excel 中讀取表格數據

    參數:

    參數說明
    path表示文件對象所在系統位置的字符串
    sep拆分每行字段的字符串或正則表達式
    header默認第一行為列索引,若沒有索引時應設置為None
    index_col從列索引中選一個或多個組成列表,當作行索引
    names用于結果的列名稱,結合 header = None使用
    skipeows跳過幾行,(從 0 開始)
    skip_footer忽略幾行,(從文件末尾處算起)
    nrows讀取幾行,(從 0 開始)
    na_values替換 NA 值
    iterator布爾類型,返回一個TextParser進行迭代讀取
    chunksize整型,作用同上,兩者結和文件對象方法 get_chunksize ( ) 使用。

    將pandas數據寫入電腦

    DataFrame. to_csv ( path )

    path:寫入路徑

    數據清洗與準備

    刪除缺失數據

    方法說明
    isnull返回布爾值組成的對象,空為True
    notnull返回布爾值組成的對象,非空為True
    dropna刪除缺失值所在的行或列
    fillna替換缺失值

    dropna (axis , how , thresh , inplace )

    參數:

  • axis 軸:{0或’index’,1或’columns’},默認為0
    刪除缺少值所在的行或列
  • how 如何刪除:{‘any’,‘all’},默認為’any’.
    “any”:只要存在一個NA值,就刪除該行或列。
    “all”:只有全部為NA值,才刪除該行或列。
  • thresh: int, optional,NA值的數量是 int 的行或列才會被刪除。
  • inplace就地;原地bool類型, default False
    False:返回一個新對象,不改變原對象
    True:不返回對象,直接改變原對象。
  • 填充缺失數據

    fillna ( value , axis , method , inplace , limit )

    參數:

  • value :替換NA值
  • axis ,
  • method 填充方法:{‘backfill’,‘bfill’,‘pad’,‘ffill’,None},默認無。
    pad/ffill:將上一個有效觀察向前傳播到下一個有效觀察,
    backfill / bfill:使用下一個有效觀測值填充間隙。
  • inplace , 同上
  • limit :int, default None
    如果指定了method方法,則這是要向前/向后填充的連續NaN值的最大數目。
    如果未指定method方法,則這是沿整個軸填充NAN的最大條目數。
    如果不是無,則必須大于0。
  • 替換數據

    replace ( to_replace , value , method , inplace , limit )

    作用:將對象內的值 to_replace 用指定值 value 進行替換

    刪除重復項

    drop_duplicates ( subset , keep , inplace , ignore_index) - - -> DataFrame

    參數:

  • subset :列標簽組成的列表,默認情況下使用所有列。
    以選中的列為標準,進行去重
  • keep :保留:{‘first’,‘last’,False},默認值為’first’
    ‘first’:除去第一次出現的重復項。
    ‘last’:刪除除最后一次出現之外的重復項。
    False:刪除所有重復項。
  • inplace :同上
  • ignore_index :忽略索引:bool,默認為False
  • 軸索引的重命名:

    區分:方法 reindex ( ) 只能調整索引的順序,而不能改變索引的名稱。

    import numpy as np import pandas as pd df=pd.DataFrame(np.arange(12).reshape(3,4),index=['BeiJing','Tokyo','New York'],columns=['one','two','three','four']) print(df) print('*'*20) print(df.reindex(['BeiJing','New York','Tokyo'])) print('*'*20) print(df.reindex(['a','b','c']))


    改變索引的名稱:

  • 利用對象屬性 index , columns 進行重命名,直接更改原對象。
  • import numpy as np import pandas as pd df=pd.DataFrame(np.arange(12).reshape(3,4),index=['BeiJing','Tokyo','New York'],columns=['one','two','three','four']) print(df) up=lambda x:x[:4].upper() df.index=df.index.map(up) print('*'*20) print(df) df.index=['a','b','c'] print('*'*20) print(df)

  • 使用方法 rename 對索引進行更新與重命名
  • rename ( index , columns , inplace)

    import numpy as np from numpy.core.defchararray import index import pandas as pd df=pd.DataFrame(np.arange(12).reshape(3,4),index=['BeiJing','Tokyo','New York'],columns=['one','two','three','four']) print(df) print('*'*20) print(df.rename(index=str.title,columns=str.upper)) print('*'*20) print(df.rename(index={'Tokyo':'東京'},columns={'three':'第三年'}))

    數據清洗總結:

    常見問題解決方法檢測方法解決方法
    異常數據刪除異常數據所在的行drop ( )
    NA值問題填充或刪除isnull ( )fillna( ) , dropna( )
    重復數據刪除重復數據duplicated ( )drop_duplicates ( )
    數據類型變更變更數據類型,指定新類型astype ( )
    部分數據包含數值和字符串進行字符串操作,map ( )
    不利于分析的數據替換數據元素replace ( )

    數據規整

    層次化索引

    數據連接

    DataFrame. merge ( left , right , how=‘inner’ , on=None , left_on=None , right_on = None )

    未完待續!!!!!

    總結

    以上是生活随笔為你收集整理的pandas的一些理解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。