10個Python Pandas技巧,使您的工作更有效率
-
願碼Slogan | 連線每個程式設計師的故事
-
網站 | http://chaindesk.cn
-
願碼願景 | 打造全學科IT系統免費課程,助力小白使用者、初級工程師0成本免費系統學習、低成本進階,幫助BAT一線資深工程師成長並利用自身優勢創造睡後收入。
-
官方公眾號 | 願碼 | 願碼服務號 | 區塊鏈部落
-
免費加入願碼全思維工程師社群 | 任一公眾號回覆“願碼”兩個字獲取入群二維碼
本文閱讀時間:8min
Pandas是一個廣泛用於結構化資料的Python包。本文將介紹一些讀者可能以前不知道的很實用的技巧。
read_csv
每個人都知道這個命令。但是讀取的資料很大,可以嘗試新增這個引數: nrows = 5 以便在實際載入整個表之前讀取表的一小部分。然後你可以通過選擇錯誤的分隔符來避免錯誤(它可能不總是以逗號分隔)。或者,您可以在linux中使用'head'命令檢查任何文字檔案中的前5行(比如說): head -n 5 data.txt 。
然後,您可以通過使用df.columns.tolist()提取所有列來提取列列表,然後新增 usecols = ['c1','c2',...] 引數來載入您需要的列。此外,如果您知道幾個特定列的資料型別,則可以新增引數 dtype = {'c1':str,'c2':int,...}, 以便載入更快。這個引數的另一個優點是,如果您有一個同時包含字串和數字的列,那麼將它的型別宣告為string是一個很好的實踐,這樣在試圖使用該列作為鍵合併表時就不會出現錯誤。
select_dtypes
如果資料預處理必須在Python中完成,那麼這個命令可以節省你一些時間。讀入表後,每列的預設資料型別可以是bool,int64,float64,object,category,timedelta64或datetime64。您可以先用df.dtypes.value_counts(),要了解資料幀的所有可能資料型別,然後執行df.select_dtypes(include=['float64', 'int64'])
選擇僅具有數字特徵的子資料幀。
copy
如果您還沒有聽說過,這是一個重要的命令。如果執行以下命令:
你會發現df1已經改變了。這是因為df2 = df1沒有複製df1並將其分配給df2,而是設定指向df1的指標。因此,df2的任何變化都會導致df1發生變化。要解決這個問題,你可以使用任何一種方法
或
map
這個命令可以很容易的進行資料轉換。首先定義一個字典,其中'keys'是舊值,'values'是新值。
一些例子:True, False to 1, 0 (for modeling); defining levels; user defined lexical encodings.
apply or not apply?
如果我們想建立一個包含其他幾列作為輸入的新列,那麼apply函式有時非常有用。
在上面的程式碼中,我們定義了一個帶有兩個輸入變數的函式,並使用apply函式將它應用於列'c1'和'c2'。
但 “應用”的問題是它有時太慢了 。如果你想計算兩列“c1”和“c2”的最大值,你當然可以這樣做
但你會發現它比這個命令慢得多:
願碼提示 :如果您可以使用其他內建函式完成相同的工作(它們通常更快),請不要使用apply。例如,如果要將列'c'舍入為整數,請執行round(df ['c'],0)或df ['c']。round(0)而不是使用apply函式:df.apply(lambda x: round(x['c'], 0), axis = 1)。
value counts
這是檢查值分佈的命令。例如,如果您想檢查“c”列中每個值的可能值和頻率,您可以執行此操作:df['c'].value_counts()
還有就是它的一些有用的技巧/引數:
A. normalize = True:如果您想檢查頻率而不是計數。
B. dropna = False:如果您還想在統計中包含缺失的值。
C. df['c'].value_counts().reset_index():如果希望將stats錶轉換為panda資料aframe並對其進行操作。
D. df['c'].value_counts().reset_index().sort_values(by='index'):在'c'列中顯示按不同值排序的統計資訊,而不是count。
number of missing values
構建模型時,您可能希望排除具有太多缺失值的行/具有所有缺失值的行。您可以使用.isnull()和.sum()來計算指定列中缺失值的數量。
select rows with specific IDs
在SQL中,我們可以使用SELECT * FROM ... WHERE ID('A001','C022',...)來獲取具有特定ID的記錄。如果你想用熊貓做同樣的事情,你可以做到
Percentile groups
您有一個數字列,並希望將該列中的值分類為組,例如前5%進入組1,5-20%進入組2,20%-50%進入組3,將底部50%歸入組4當然,你可以用pandas.cut來做,但我想在這裡提供另一種選擇:
這是快速執行(沒有使用應用功能)。
to_csv
這也是每個人都會使用的命令。我想在這裡指出兩個技巧。第一個是:print(df[:5].to_csv())
您可以使用此命令打印出準確寫入檔案的前五行。
另一個技巧是處理混合在一起的整數和缺失值。如果列包含缺失值和整數,則資料型別仍將是float而不是int。匯出表時,可以新增 float_format ='%。0f' 將所有浮點數舍入為整數。如果您只想要所有列的整數輸出,請使用此技巧 - 您將擺脫所有惱人的'.0'。
END
熱文推薦
Google面試問題指南:使用Python刪除重複出現的字元
System.out.println("點個在看吧!"); console.log("點個在看吧!"); print("點個在看吧!"); printf("點個在看吧!\n"); cout << "點個在看吧!" << endl; Console.WriteLine("點個在看吧!"); Response.Write("點個在看吧!"); alert("點個在看吧!") echo "點個在看吧!"
點選閱讀原文,檢視更多技術乾貨
你點的每個“在看”,我都認真當成了喜歡