「軟體工程師閱讀教科書作為參考時不會記住所有的東西,但是要知道如何快速查找重要的知識點。」
為了能夠快速查找和使用功能,使我們在進行機器學習模型時能夠達到一定流程化。我創建了這個pandas函數的備忘單。這不是一個全面的列表,但包含了我在構建機器學習模型中最常用的函數。讓我們開始吧!
本附註的結構:
導入數據導出數據創建測試對象查看/檢查數據選擇查詢數據清理篩選、排序和分組統計數據首先,我們需要導入pandas開始:
import pandas as pd
導入數據
使用函數pd.read_csv直接將CSV轉換為數據格式。
注意:還有另一個類似的函數pd。read_excel用於excel文件。
# Load data df = pd.read_csv('filename.csv') # From a CSV filedf = pd.read_excel('filename.xlsx') # From an Excel file
導出數據
tocsv()將數據存儲到本地的文件。我們可以通過df[:10].tocsv()保存前10行。我們還可以使用df.to_excel()保存和寫入一個DataFrame到Excel文件或Excel文件中的一個特定表格。
df.to_csv('filename.csv') # Write to a CSV filedf.to_excel('filename.xlsx') # Write to an Excel file
創建測試對象
從輸入的數據建立一個DataFrame
# Build data frame from inputted datadf = pd.DataFrame(data = {'Name': ['Bob', 'Sally', 'Scott', 'Katie'],'Physics': [68, 74, 77, 78], 'Chemistry': [84, 100, 73, 90], 'Algebra': [78, 88, 82, 87]})
或者從列表中創建一個series
# Create a series from an iterable my_listmy_list = [['Bob',78],['Sally',91], ['Scott',62], ['Katie',78], ['John',100]]df1 = pd.Series(my_list) # Create a series from an iterable my_list
查看/檢查數據
head():顯示DataFrame中的前n條記錄。我經常把一個數據檔案的最上面的記錄列印在我的jupyter notebook上,這樣當我忘記裡面的內容時,我可以回頭查閱。
df.head(3) # First 3 rows of the DataFrame
tail():返回最後n行。這對於快速驗證數據非常有用,特別是在排序或附加行之後。
df.tail(3) # Last 3 rows of the DataFrame
添加或插入行
要向DataFrame追加或添加一行,我們將新行創建為Series並使用append()方法。
在本例中,將新行初始化為python字典,並使用append()方法將該行追加到DataFrame。
在向append()添加python字典類型時,請確保傳遞ignore_index=True,以便索引值不會被使用。生成的軸將被標記為編號series0,1,…, n-1,當連接的數據使用自動索引信息時,這很有用。
append() 方法的作用是:返回包含新添加行的DataFrame。
#Append row to the dataframe, missing data (np.nan)new_row = {'Name':'Max', 'Physics':67, 'Chemistry':92, 'Algebra':np.nan}df = df.append(new_row, ignore_index=True)
向DataFrame添加多行
# List of series list_of_series = [pd.Series(['Liz', 83, 77, np.nan], index=df.columns),pd.Series(['Sam', np.nan, 94,70], index=df.columns ), pd.Series(['Mike', 79,87,90], index=df.columns), pd.Series(['Scott', np.nan,87,np.nan], index=df.columns),]# Pass a list of series to the append() to add multiple rowsdf = df.append(list_of_series , ignore_index=True)
我們也可以添加新的列
# Adding a new column to existing DataFrame in Pandassex = ['Male','Female','Male','Female','Male','Female','Female','Male','Male']df['Sex'] = sex
info()函數用於按列獲取標題、值的數量和數據類型等一般信息。一個類似但不太有用的函數是df.dtypes只給出列數據類型。
df.info() #Index, Datatype and Memory information
# Check data type in pandas dataframedf['Chemistry'].dtypes >>> dtype('int64')# Convert Integers to Floats in Pandas DataFramedf['Chemistry'] = df['Chemistry'].astype(float) df['Chemistry'].dtypes>>> dtype('float64')# Number of rows and columnsdf.shape >>> (9, 5)
value_counts()函數的作用是:獲取一系列包含唯一值的計數。
# View unique values and counts of Physics columndf['Physics'].value_counts(dropna=False)
選擇
在訓練機器學習模型時,我們需要將列中的值放入X和y變量中。
df['Chemistry'] # Returns column with label 'Chemistry' as Series
df[['Name','Algebra']] # Returns columns as a new DataFrame
df.iloc[0] # Selection by position
df.iloc[:,1] # Second column 'Name' of data frame
df.iloc[0,1] # First element of Second column>>> 68.0
數據清理
rename()函數在需要重命名某些選定列時非常有用,因為我們只需要指定要重命名的列的信息。
# Rename columnsdf = df.rename({'Name':'Student','Algebra':'Math'}, axis='columns')
在DataFrame中,有時許多數據集只是帶著缺失的數據的,或者因為它存在而沒有被收集,或者它從未存在過。
NaN(非數字的首字母縮寫)是一個特殊的浮點值,所有使用標準IEEE浮點表示的系統都可以識別它
pandas將NaN看作是可互換的,用於指示缺失值或空值。有幾個有用的函數用於檢測、刪除和替換panda DataFrame中的空值。
# Checks for null Values, Returns Boolean Arrraycheck_for_nan = df.isnull()
要檢查panda DataFrame中的空值,我們使用isnull()或notnull()方法。方法返回布爾值的數據名,對於NaN值為真。在相反的位置,notnull()方法返回布爾值的數據,對於NaN值是假的。
value = df.notnull() # Opposite of df2.isnull()
我們使用dropna()函數刪除所有缺少值的行。
drop_null_row = df.dropna() # Drop all rows that contain null values
有時,我們可能只是想刪除缺失值的列。
# Drop all columns that contain null valuesdrop_null_col = df.dropna(axis=1)
我們可以使用fillna()來填充缺失的值。例如,我們可能想用0替換' NaN '。
replace_null = df.fillna(0) # Replace all null values with 0
或者用平均值替換NaN。
# Replace all null values with the mean (mean can be replaced with almost any function from the statistics module)df = round(df.fillna(df.mean()),2)
方法可用於替換DataFrame中的值
one = df.replace(100,'A') # Replace all values equal to 1 with 'one'
篩選、排序和分組
找到看到物理成績達到80或80以上的學生
fil_80 = df[df['Physics'] > 80]
學生在化學考試中得到80分或更高的分數,數學考試中卻不到90分
fil = df[(df['Chemistry'] > 80) & (df['Math'] < 90)]
sort_values ()可以以特定的方式對pandas數據進行排序。通常回根據一個或多個列的值對panda DataFrame進行排序,或者根據panda DataFrame的行索引值或行名稱進行排序。
例如,我們希望按學生的名字按升序排序。
ascending = df.sort_values('Student')
化學分數按降序排列
descending = df.sort_values('Chemistry',ascending=False)
更複雜一點的,我們希望按物理分數的升序排序,然後按化學分數的降序排序。
df.sort_values(['Physics','Chemistry'],ascending=[True,False])
groupby 是一個非常簡單的概念。我們可以創建一組類別,並對類別應用一個函數。這是一個簡單的概念,但卻是我們經常使用的極有價值的技術。Groupby的概念很重要,因為它能夠有效地聚合數據,無論是在性能上還是在代碼數量上都非常出色。
通過性別進行分組
group_by = df.groupby(['Sex']) # Returns a groupby object for values from one columngroup_by.first() # Print the first value in each group
計算性別分組的所有列的平均值
average = df.groupby(『Sex』).agg(np.mean)
統計數據
我們可能熟悉Excel中的數據透視表,可以輕鬆地洞察數據。類似地,我們可以使用panda中可用的pivottable()函數創建Python pivot表。該函數與groupby()函數非常相似,但是提供了更多的定製。
假設我們想按性別將值分組,並計算物理和化學列的平均值和標準差。我們將調用pivot_table()函數並設置以下參數:
index設置為 'Sex',因為這是來自df的列,我們希望在每一行中出現一個唯一的值
values值為'Physics','Chemistry' ,因為這是我們想應用一些聚合操作的列
aggfunc設置為 'len','np.mean','np.std
pivot_table = df.pivot_table(index='Sex',values=['Physics','Chemistry'], aggfunc=[len, np.mean, np.std])
注意:使用len的時候需要假設數據中沒有NaN值。
description()用於查看一些基本的統計細節,如數據名稱或一系列數值的百分比、平均值、標準值等。
df.describe() # Summary statistics for numerical columns
使用max()查找每一行和每列的最大值
# Get a series containing maximum value of each rowmax_row = df.max(axis=1)
# Get a series containing maximum value of each column without skipping NaNmax_col = df.max(skipna=False)
類似地,我們可以使用df.min()來查找每一行或每列的最小值。
其他有用的統計功能:
sum():返回所請求的軸的值的總和。默認情況下,axis是索引(axis=0)。
mean():返回平均值
median():返回每列的中位數
std():返回數值列的標準偏差。
corr():返回數據格式中的列之間的相關性。
count():返回每列中非空值的數量。
總結
我希望這張小抄能成為你的參考指南。當我發現更多有用的Pandas函數時,我將嘗試不斷地對其進行更新。本文的代碼
github /Nothingaholic/Python-Cheat-Sheet/blob/master/pandas.ipynb
作者:XuanKhanh Nguyen
deephub翻譯組