Pandas學習總結梳理【Pandas學習記錄】

參考課程:Numpy & Pandas (莫煩 Python 數據處理教程)Python數據分析和數據可視化

Pandas基本介紹

  1. Pandas像是字典形式的Numpy,它給Numpy的不同行和列都進行了命名。

Pandas數據結構及其創建

  1. 數據結構有兩種:Series和DataFrame。而DataFrame可以看作是共享了所有行索引的由Series組成的字典。
  2. Series對象的創建:pd.Series(list) 和 pd.date_range(‘20160101’,periods =6) ---- 時間序列的創建。
DatetimeIndex(['2016-01-01', '2016-01-02', '2016-01-03', '2016-01-04',
               '2016-01-05', '2016-01-06'],
              dtype='datetime64[ns]', freq='D')
  1. DataFrame對象的創建方式1:指定數據元素、行索引index和列索引columns ---- pd.DataFrame(np.random.randn(6,4),index = date,columns=[1,3,4,5]) ---- 默認地,行、列索引是01234567…
  2. DataFrame對象的創建方式2:輸入字典[鍵是單值,值是列表] ---- pd.DataFrame({‘A’:1,
    ‘B’:pd.Timestamp(‘20130102’),
    ‘C’:pd.Series(1,index = list(range(4)),dtype=‘int64’),
    ‘D’:np.array([3]*4,dtype=‘int32’),
    ‘E’:pd.Categorical([‘test’,‘train’,‘test’,‘tram’]),
    ‘F’:‘foo’}) ---- 行索引默認爲01234…
  3. DataFrame對象講解的兩個名字介紹:
    index和column的名字和位置介紹

Pandas數據結構的屬性和常用統計方法

  1. Series對象的屬性:dtype、index、values、
  2. DataFrame對象的屬性:dtypes、index、columnsvalues 、T、info(每列的數據類型及非空值的個數等)
  3. DataFrame對象的方法
  4. object.describe ---- 僅限於數字型的column。
  5. object.[sum| mean| idmax] ---- 得到垂直方向上每一列的最大值的索引位置。
  6. object.value_counts ---- 統計每個元素出現的頻率,且按照頻率高低進行排序展示。
  7. object.pct_change ---- 計算垂直方向上,相鄰兩個元素的變化百分比,常見於股票的變化統計。
  8. df.corr ---- 返回每一列之間的相關係數!!!!!
  9. df.cov ---- 返回每一列之間的協方差。
    10.df.corrwith(series) ---- 返回df對象與某一列之間的相關係數。

瑣碎知識點;

  1. pandas對象調用方法提倡使用對象點出方法的方式。

Pandas排序

  1. df.sort_index(axis,ascending) ---- 按行索引排序
  2. df.sort_values(by,ascending) ---- 按列名排序 而 按多列排序時用列表傳參。
  3. df|series.rank() ---- 知曉序列中對應的元素值在整個序列中的排名,且從大到小。
  4. df.reindex([行|列索引順序],axis) — 人爲地指定索引順序進行排序,且如果添加了不存在地列或者行,會自動填充nan,順利進行。

Pandas選擇數據與賦值數據

  1. df.column | df[“column”] | df[[“column1”,“column2”] | 列索引名不能用切片] ---- 索引爲一個值,表示對單列的選擇,索引爲多個值(非切片)表示對多列的選擇。
  2. df[ “index1”:“index2” ] ---- 切片表示對行索引的位置進行切片選擇。
  3. df.loc[“index”] | df.loc[:,[“column1”,“column2”]] | df.loc[“index_name1”:“index_name2”,“column1”:“column2”] ---- 對某一行進行選擇、對指定的多列進行選擇。loc的規則是,第一個參數爲index值或者index值的切片又或者逗號式的多值列表,第二個參數同第一個參數。
  4. df.iloc[單個索引號 | 索引號的切片 | 多個用逗號構成的索引號形成的列表:同左] ---- iloc的規則是,單值的位置、切片和逗號式的多值列表均可以,但是值必須是索引位置,而不是索引的名字
  5. df[] 、df.loc 、df.iloc 的選擇規則總結梳理
    選擇規則總結梳理
  6. bool式選擇數據 ---- df[df.A > 8],雖然只對比A大,但是BCD也顯示。
  7. 賦值的內容可以是單值、np.nan、Series列表。
print(df)
print(df[df.A>8])
###### 輸出內容 ###########
                     A   B   C   D
2013-01-01   0   1   2   3
2013-01-02   4   5   6   7
2013-01-03   8   9  10  11
2013-01-04  12  13  14  15
2013-01-05  16  17  18  19
2013-01-06  20  21  22  23
                     A   B   C   D
2013-01-04  12  13  14  15
2013-01-05  16  17  18  19
2013-01-06  20  21  22  23

瑣碎知識點:

  1. loc 和 iloc 均可以支持 名字和位置 的單值、切片和逗號式的多值列表。
  2. “a” in Series ,本質上是判斷是否處於Series.index中;如果判斷是否是
    Series.values中的值,需要指定:”a“ in Series.values。

Pandas的基礎運算

  1. Series對象間的相加減乘除 ---- 規則是必須index索引相對齊才能使得對應值進行運算。
  2. DataFrame對象與Series的相加減乘除 ---- 規則是列標籤對齊,進行廣播且不匹配列填充nan值。
  3. DataFrame對象與DataFrame的相加減乘除 ---- 規則是 行列標籤均對齊,未對齊的地方填充nan。

DataFrame對象的增加刪除列

  1. 通過df[“column”] | data.loc[:,“column”] 的方式選擇並不賦值,但不可選擇df.column 和 iloc。
  2. del column 刪除一列
  3. df.drop(“column”|[“column1”,“column2”] ,axis) ---- 刪除行或列
  4. df.loc[“index_name”] ---- 增加行
  5. df.assign(new_column = list) ---- 增加列。
  6. pd.concat(df1,df2) ---- 增加行,以同屬性對齊的方式。

Pandas丟失值處理方法

  1. df.dropna(axis,how) ---- how=any則只要指定軸上存在nan,就刪除相應的行或列;how=all 則需要指定軸上全部爲nan,纔可以刪除相應的行或列。
  2. df.fillna(value = 0) ---- 填充0值。
  3. df.isna|isnull---- 判斷矩陣或者矩陣的某列是否存在缺失值。
  4. df.fillna({‘a’:1,“b”:10,“c”:30,“d”:1000}) ---- 不同列對應的nan值採取不同的填充值。
  5. Series.fillna(data.a.mean()) ---- 爲某一列的nan填充該列的平均值。

瑣碎知識點:

  1. isna() 的另一個用法:當矩陣太大時,但是又想知道是否某一列或者整個矩陣是否存在nan值。則用(df.A.isna()).sum() 或者 np.any(df.isna()==True)

Pandas重複值處理方法

  1. df.duplicated() ---- 檢查是否存在重複行,並返回一維bool矩陣。
  2. df[df.duplicated()] ---- bool式數據選擇,取出重複的行。
  3. df[~df.duplicated()] ---- 取出不重複的行。
  4. df.drop_duplicates([“column1”,“column2”],axis) ---- 去除在column1和2上重複的行,且可以指定軸。

Series替換處理方式

  1. Series.replace(3,np.nan) ---- 單個情況。
  2. Series.replace({3:np.nan,2:100}) ---- 多種情況

字符串處理

  1. 字符串處理的方法大多經由str方法點出!
  2. df.k1.str.replace(“beijing”,“shanggai”) ---- 將某一列中的A字符串替換爲B字符串。
  3. df.k1.str.contains(“chushou”) ---- 判斷某一列的元素是否包含**是(不是含)**字符串。
  4. df[df.k1.str.contains(“chushou”)] ---- 選擇出 包含某個字符串的行的整體內容。
  5. df.k1.str.upper() ---- 將某一列的字符串大寫。
  6. data.k1.str.split(’,’) ---- 將某一列的字符串處理成一列的列表。

應用函數處理數據

  1. Series.map ---- map 僅可用於Series對象,且接受一個函數,或是一個字典,元素級別
  2. df.apply ---- apply 可以應用在df的行或列之上,且指定軸方向。
  3. df.applymap – applymap 應用在 元素級別。

數據離散化

  1. pd.cut(Series,bins) ---- 按照bins區間,返回一個value對應的bin的一維列表。
  2. pd.cut(data.k1,bins).value_counts() ---- 輔助進行組內數目排序,更加直觀。
  3. pd.cut(data,4) ---- 指定對範圍進行均等分割
  4. pd.qcut(data,4) ---- 指定對個數進行均等分割

Pandas合併

  1. pd.concat([df對象列表],axis,ignore_index,join) ---- 指定軸方向上合併df對象,且注意join默認爲outer。
  2. df.append(df2|[df2,df3]) ---- 對象豎向合併。
  3. pd.merge(df1,df2,on=“column_name”|[“column_name1”,“column_name2”],how=”inner|outer|right|left“,indicator=True) ---- 基於一列或多列的列名進行左右融合
  4. pd.merge(df1,df2,left_index=True,right_index=True,how=”inner|outer|right|left“) ---- 基於行索引進行左右融合
  5. df.join(df2) ---- merge的以index融合的快捷方式。

瑣碎知識點:

  1. merge,默認當兩個df對象的屬性名相同時,會默認將同名的屬性作爲融合的鍵,避免的方式是,借用on關鍵詞來指定某一列或多列作爲融合的鍵,除此之外,還可以指定left_on與right_on。
  2. merge還允許指定用左邊的索引和右邊的列作爲融合的鍵left_index 和 right_on

Pandas數據聚合與分組運算

  1. df.groupby(df[“animal”])[“weight”].mean() ---- 根據單列進行分組後,對單列進行運算。
  2. df.groupby([“size”,“adult”]).size() ---- 根據多列進行分組,返回一個多層索引Series。
  3. df.groupby([“size”,“adult”]).size().unstack() ---- 將內層索引轉化爲列索引,最後返回一個DF。
  4. df.groupby([“size”,“adult”]).size().unstack().stack() ---- 將df的columns轉化爲一個多層索引。

Pandas透視表

  1. data.pivot_table(“cjzongjia”,index=“xingming”,columns= “congyenianxian”,aggfunc=“sum”)

Pandas時間序列

  1. pd.to_datetime([“2017/12/01”,“2017/12/02”]) ---- 識別多種日期格式爲統一的日期格式。
  2. pd.date_range(“首日期”,“末日期”,freq=“B”) ---- 自行生成時間序列
  3. pd.date_range(start = “20171201”,periods=20) ---- 自行生成時間序列
  4. ts.resample(“M”)

Pandas繪圖

  1. Series.plot() ---- 索引作爲橫座標,值作爲縱座標的線圖。
  2. DataFrame.plot() ---- 行索引作爲橫座標,每一個列作爲一個線圖
  3. plot.bar | hist| box| kde| area| sactter| hexbin (x[可選],y,rot,color,label)---- 更加豐富的圖。
  4. plt.style.use(“ggplot”) ---- 設置顯示類型

瑣碎知識點:

  1. concat的規則:上下合併,關注列名對齊,即使列名衝突也不會出錯;左右合併,關注行索引對齊,但行索引僅局部對齊會出錯

Pandas數據加載和存儲

  1. pd.read_csv(“file.csv”,sep=",",header = None,names= np.arange(14),index_col=“location”,nrows=30) ---- 加載數據
  2. pd.to_csv() ---- 存儲數據。

=============================== T H E E N D ! ===============================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章