匯入模組
import numpy as np
import pandas as pd
Pandas是建立在numpy的一個資料處理套件。
Pandas 數據結構
1) Series
2) DataFrame
♦Series 物件
常用的屬性或方法 | 描述 |
---|---|
axes | 返回行軸標籤的列表。 |
dtype | 返回對象的dtype。 |
empty | 如果系列為空,則返回True。 |
ndim | 根據定義1,返回基礎數據的維數。 |
size | 返回基礎數據中的元素數。 |
values | 將系列返回為ndarray。 |
head() | 返回前n行。 |
tail() | 返回最後n行。 |
- 建立
pandas.Series
Pandas Series是被索引資料的一維數組,他可以使用Array、Dict、Scalar value or constant來建立。
pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
參數 | 描述 |
---|---|
1.data | 數據採用各種形式,如ndarray,list,常量 |
2.index | 索引值必須是唯一且可清除的,與數據長度相同。如果沒有傳遞索引,則默認為np.arrange(n)。 |
3.dtype | dtype用於數據類型。如果為None,則將推斷數據類型 |
4.copy | 複製數據。默認為False |
-
映射 (map與one hot encoding)
pandas.Series.map
pandas.get_dummies
pd.idxmax、np.argmax用於逆轉one-hot-encoding
-
重置(也可套用DataFrame)
DataFrame.reset_index
Series.reset_index
-
更改dtype(也可套用DataFrame)
[Series.astype]https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.Series.astype.html
♦DataFrame 物件
常用的屬性或方法 | 描述 |
---|---|
T | 轉置行和列。 |
axes | 返回一個列表,其中行軸標籤和列軸標籤為唯一成員。 |
dtypes | 返回此對像中的dtypes。 |
empty | 如果NDFrame完全為空,則為True [無項目]; 如果任何軸的長度為0。 |
ndim | 軸數/數組尺寸。 |
shape | 返回表示DataFrame維度的元組。 |
size | NDFrame中的元素數。 |
values | NDFrame的Numpy表示。 |
head() | 返回前n行。 |
tail() | 返回最後n行。 |
可以使用各種輸入創建pandas DataFrame,包括 Lists、dict、Series、Numpy ndarrays、另一個 DataFrame
pandas.DataFrame
pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
參數 | 描述 |
---|---|
data | 數據採用各種形式,如ndarray,系列,地圖,列表,字典,常量以及另一個DataFrame。 |
index | 對於行標籤,如果沒有傳遞索引,則用於結果幀的索引是Optional Default np.arrange(n)。 |
columns | 對於列標籤,可選的默認語法是 - np.arrange(n)。僅當沒有傳遞索引時才會出現這種情況。 |
dtype | 每列的數據類型。 |
copy | 如果默認值為False,則此命令(或其他任何命令)用於復制數據。 |
-
建立
-
索引、添加、修改
刪除
DataFrame.drop
DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)
參數 | 描述 |
---|---|
labels | 要刪除的索引標籤或列標籤。 |
axis | {0或'index',1或'columns'},默認為0 |
index, columns | 要刪除的索引標籤跟列標籤。 |
level | int或level name,可選,對於MultiIndex,將從中刪除標籤的級別。 |
inplace | bool,默認為False,如果為True,則進行就地操作並返回None。 |
errors | {‘ignore’, ‘raise’}, 默認‘raise’,如果“忽略”,則禁止錯誤,僅刪除現有標籤。 |
-
查找及刪除重複
DataFrame.duplicated
DataFrame.drop_duplicates
加入、合併
pandas合併
-
DataFrame.append
DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=None)
參數 | 描述 |
---|---|
other | DataFrame或Series / dict-like對象,或者這些對象的列表。(要追加的數據) |
ignore_index | boolean,默認為False,如果為True,請不要使用索引標籤。 |
verify_integrity | boolean,默認為False,如果為True,則在創建具有重複項的索引時引發ValueError。 |
sort | boolean, 默認為 None,如果self和other的列未對齊,請對列進行排序。不推薦使用默認排序,並將在未來版本的pandas中更改為not-sorting。 顯式傳遞sort = True以使警告靜音並排序。 顯式傳遞sort = False以使警告靜音而不進行排序。 |
-
pandas.concat
pandas.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True)
參數 | 描述 |
---|---|
objs | Series,DataFrame或Panel對象的序列或映射,如果傳遞了dict,則排序的鍵將用作keys 參數,除非它被傳遞,在這種情況下將選擇值(見下文)。任何None對像都將以靜默方式刪除,除非它們都是None,在這種情況下將引發ValueError |
axis | {0 /'index',1 /'columns'},默認為0,軸連接起來 |
join | {'inner','outer'},默認'outer',如何處理其他軸上的索引(inner使用交集、outer使用聯集) |
join_axes | 索引對象列表,用於其他n - 1軸的特定索引,而不是執行內部/外部設置邏輯 |
ignore_index | boolean,默認為False,如果為True,請不要使用串聯軸上的索引值。生成的軸將標記為0,...,n - 1.如果要連接並置軸沒有有意義的索引信息的對象,這將非常有用。請注意,在連接中仍然遵循其他軸上的索引值。 |
keys | 序列,默認None,如果傳遞了多個級別,則應包含元組。使用傳遞的鍵作為最外層來構造層次索引 |
levels | 要判斷的序列列表,默認為None,用於構造MultiIndex的特定級別(唯一值)。否則,他們將從鍵中推斷出來 |
names | list,默認None,生成的分層索引中的級別的名稱 |
verify_integrity | boolean,默認為False,檢查新的連鎖軸是否包含重複項。相對於實際數據連接,這可能非常昂貴 |
sort | boolean, 默認 None,如果在連接 為“外部” 時尚未對齊,則對非連接軸進行排序。不推薦使用當前的排序默認值,並且將在未來版本的pandas中更改為not-sorting。明確地傳遞sort=True警告並排序。明確地通過sort=False沉默警告而不是排序。當join='inner'已經保留非連接軸的順序時,這沒有效果。版本0.23.0中的新功能。 |
copy | boolean,默認為True,如果為False,則不要複制數據 |
-
DataFrame.merge
默認會自動對應相同欄位內容進行合併。
DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
參數 | 描述 |
---|---|
right | DataFrame |
how | {‘left’, ‘right’, ‘outer’, ‘inner’}, default ‘inner’,left:僅使用左框架中的鍵,類似於SQL左外連接; 保留關鍵順序,right:僅使用右框架中的鍵,類似於SQL右外連接; 保留關鍵順序,outer:使用來自兩個幀的鍵的並集,類似於SQL全外連接; 按字典順序排序鍵,inner:使用兩個幀的鍵交集,類似於SQL內連接; 保留左鍵的順序。 |
on | 標籤或列表,要加入的列或索引級別名稱。這些必須在兩個DataFrame中找到。如果on為None且未合併索引,則默認為兩個DataFrame中列的交集。 |
left_on | 標籤或列表,或類似數組,要在左側DataFrame中連接的列級或索引級別名稱。也可以是左數據幀長度的數組或數組列表。這些數組被視為列。 |
right_on | 標籤或列表,或類似數組,要在右側DataFrame中連接的列級或索引級別名稱。也可以是右側DataFrame長度的數組或數組列表。這些數組被視為列。 |
left_index | 布爾值,默認為False,使用左側DataFrame中的索引作為連接鍵。如果是MultiIndex,則其他DataFrame中的鍵數(索引或列數)必須與級別數相匹配 |
right_index | 布爾值,默認為False,使用右側DataFrame中的索引作為連接鍵。與left_index相同的警告 |
sort | 布爾值,默認為False,在結果DataFrame中按字典順序對連接鍵進行排序。如果為False,則連接鍵的順序取決於連接類型(關鍵字如何) |
suffixes | 2長度序列(元組,列表,...),後綴分別應用於左側和右側的重疊列名稱 |
copy | boolean,默認為True,如果為False,則不要不必要地複制數據 |
indicator | 布爾值或字符串,默認為False,如果為True,則添加一列以輸出名為“_merge”的DataFrame,其中包含每行源的信息。如果string,具有每行源的信息的列將被添加到輸出DataFrame,並且列將被命名為string的值。信息列為分類型,對於其合併鍵僅出現在“左”DataFrame中的觀察值為“left_only”,對於其合併鍵僅出現在“右”DataFrame中的觀察值為“right_only”,如果為觀察的合併密鑰在兩者中找到。 |
validate | string, default None,如果指定,則檢查merge是否為指定類型。one_to_one”或“1:1”檢查合併鍵是否在左右數據集中都是唯一的。 “one_to_many”或“1:m”檢查合併鍵在左數據集中是否唯一。 “many_to_one”或“m:1”檢查合併鍵在右側數據集中是否唯一。 “many_to_many”或“m:m”允許,但不會導致檢查。 |
-
DataFrame.join
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
參數 | 描述 |
---|---|
other | DataFrame,具有名稱字段集的系列或DataFrame列表,索引應該類似於此列中的一列。如果傳遞了Series,則必須設置其name屬性,並將其用作生成的連接DataFrame中的列名 |
on | name,tuple / names of list或array-like,調用者中的列或索引級別名稱,用於連接其他索引,否則加入index-on-index。如果給定多個值,則另一個 DataFrame必須具有MultiIndex。如果數組尚未包含在調用DataFrame中,則可以將數組作為連接鍵傳遞。像Excel VLOOKUP操作一樣 |
how | {‘left’, ‘right’, ‘outer’, ‘inner’}, default ‘left’,如何處理這兩個對象的操作。left:使用調用框架的索引(如果指定了on,則使用列),right:使用其他框架的索引,outer:調用框架索引的形式聯合(或指定的列,如果指定)與其他框架的索引,並按字典順序對其進行排序,inner:調用框架索引(或指定的列,如果指定)與其他框架索引的形式交集,保留調用框架的索引順序 |
lsuffix | string,從左框架的重疊列使用的後綴 |
rsuffix | string,從右框架的重疊列使用後綴 |
sort | 布爾值,默認為False,按連接鍵按字典順序排序結果DataFrame。如果為False,則連接鍵的順序取決於連接類型(關鍵字如何) |
- 索引調換
DataFrame.reindex
DataFrame.reindex(labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)
-
複製
複製DataFrame以及DataFrame切片(與numpy相同切片是原DataFrame視圖,需要維新資料時須使用.copy() )資料。
DataFrame.copy
DataFrame.copy(deep=True)
-
遍歷(iterrows)
DataFrame.iterrows
Index、column 索引
♦Index 物件
Index 、columns都是Index物件。
♦索引操作
-
loc、iloc
loc可傳入index或column名稱,iloc可傳入index或column代號(數字),loc也可傳入相應形狀的bool值(1維),多維需要直接使用[]。
-
查找NAN值
np.nan需要使用pandas.isnull查找。
-
多重查找
- 最大直索引(常用於one hot reverse)
pandas.DataFrame.idxmax
計算
♦基本運算
♦Broadcasting(廣播)
numpy的Broadcasting特性:
缺失資料
♦類型
pandas使用NaN與None來表示空值。
-
None
有None資料,只能維python的Object形式,會降低整個資料的運算效率。
*補充:pandas的字串是以Object形式儲存的。
-
NaN
NaN是一個IEEE浮點數的一個特殊值,NaN做運算=NaN。
♦Null值操作(NA值)
- isnull()
- notnull()
- dropna()
- fillna()
階層(多重)索引
類似pandas.panel,但panel以棄用,pandas建議使用多重索引方式來表示。
♦MultiIndex 物件
MultiIndex.from_arrays |
---|
將數組列表轉換為MultiIndex |
MultiIndex.from_product |
從迭代的笛卡爾積中創建一個MultiIndex |
MultiIndex.from_tuples |
將元組列表轉換為MultiIndex |
-
建立
-刪除
-
添加索引名稱
-
多重索引切片
-
多重索引排序
Pandas索引若無進行排序,使用切片取連續資料會出現錯誤,可使用numpy方法或下面介紹的pandas方法進行排序。
::錯誤示例::
-
DataFrame.sort_index() :按照索引排序。
DataFrame.sort_index
-
DataFrame.sort_values() :按照內容(值)排序。
DataFrame.sort_values
- 快速轉換
- 單層
- 多層