作為乙個在進入資料分析領域之前幹過開發的攻城獅,我看到我的同行以及新手在使用 pandas 時會犯很多低階錯誤。
今天我說出這五個坑,讓大家別一而再,再而三的掉坑里。
修復這些錯誤能讓你的**邏輯更清晰,更易讀,而且把電腦記憶體用到極致。
這不能說是誰的錯,因為在 pandas 中獲取和設定值的方法實在太多了。
大部分時候,你必須只用索引找到乙個值,或者只用值找到索引。
然而,在很多情況下,你仍然會有很多不同的資料選擇方式供你支配:索引、值、標籤等。
在這些不同的方法中,我當然會更喜歡使用當中最快的那種方式。下面列舉最慢到最快的常見選擇。比如:
測試資料集執行的是 20000 行的 dataframe
無論你是在伺服器上,還是僅僅是你的膝上型電腦,絕大多數人從來沒有使用過他們所有的計算能力。
現在大多數處理器(cpu)都有4核,甚至有的是8核。
重點來了!!
預設情況下,pandas 只使用其中乙個核。
怎麼辦?
用 modin!
modin 是乙個 python 模組,能夠通過更好地利用你的硬體來增強 pandas 的功能。modin dataframes 不需要任何額外的**,在大多數情況下會將你對 dataframes 所做的一切加速 3 倍或更多。
modin 的作用更多的是作為乙個外掛程式而不是乙個庫來使用,因為它使用 pandas 作為後備,不能單獨使用。
為了避免重新建立已經完成的測試,我從 modin 文件中加入了這張,展示了它在標準筆記本上對read_csv()
函式的加速作用。請注意,modin 還在開發中,雖然我在生產中使用它,但不可避免會有一些 bug。請檢視 issues in github 和 supported api 獲取更多資訊。
當你把資料匯入到 dataframe 中,沒有特別告訴 pandas 列和資料型別時,pandas 會把整個資料集讀到記憶體中,只是為了弄清資料型別而已。
你可以使用df.info()
來檢視乙個 dataframe 使用了多少記憶體,這和 pandas 僅僅為了弄清每一列的資料型別而消耗的記憶體大致相同。
除非你在折騰很小的資料集,或者你的列是不斷變化的,否則你應該總是指定資料型別。
每次指定資料型別是乙個好習慣。
為了做到這一點,只需新增 dtypes 引數和乙個包含列名及其資料型別的字串的字典。比如說:
對於不是來自 csv 的 dataframes 也同樣的適用。
dataframes 最好的特性之一就是它們很容易建立和改變。但不幸的***是,大多數人最終會得到這樣的**:
發生的情況是你把 df2 和 df1 留在 python 記憶體中,即使你已經轉移到 df3。不要把多餘的 dataframes 留在記憶體中,如果你使用的是膝上型電腦,它差不多會損害你所做的所有事情的效能。
如果你是在伺服器上,它正在損害該伺服器上其他所有人的效能(或者在某些時候,你會得到乙個 "記憶體不足 "的錯誤)。
與之相反的是,這裡有一些簡單的方法來保持你的記憶體不超負荷:
這可能是最常見的錯誤了,把它排在第 5 位,是因為它的影響最小。我看到這個錯誤甚至會發生在經驗豐富的專業人士的部落格文章之中。
matplotlib 是由 pandas 自動匯入的,它甚至會在每個 dataframe 上為你設定一些圖表配置。既然已經為你在 pandas 中內建了它,那就沒有必要再為每張圖表匯入和配置了。
下面是乙個錯誤的例子,雖然這是乙個基本的圖表,但還是很浪費**。
而正確的方法是這樣的:
df['x'].plot()
這樣更簡單吧?你可以在這些 dataframe 繪圖物件上做任何你可以對其他 matplotlib 繪圖物件做的事情。比如:
df['x'].plot.hist(title='chart title')
via:
千萬別把手機放褲袋裡!!
千萬別把手機放褲袋裡 手機什麼時候輻射最強?當人們使用手機時,手機會向發射基站傳送無線電波,而無線電波或多或少地會被人體吸收,這些電波就是手機輻射。一般來說,手機待機時輻射較小,通話時輻射大一些,而在手機號碼已經撥出而尚未接通時,輻射最大,輻射量是待機時的3倍左右。這些輻射有可能改變人體組織,對人體...
Python pandas,建立Series型別
numpy只能處理數值型別的資料。pandas除了可以處理數值型別外,還可以處理非數值型別的資料 例如 字串 時間序列等 pandas常用的資料型別 series 一維,帶標籤的陣列,對應資料庫中的一條記錄 dataframe 二維,series容器,對應資料庫中的表 demo.py series的...
python pandas使用記錄
在使用numpy中array格式的矩陣時,我們通常使用如a 2 4,5 10 獲取陣列中一部分資料,但是dataframe結構的陣列就不能這麼寫,可以使用iloc方法,即index locate,另外有個相似的方法loc,這個方法是通過column名字進行資料定位的 import pandas as...