5個例子比較Python Pandas 和R data.table
在這篇文章中,我們將比較Pandas 和data.table,這兩個庫是Python和R最長用的數據分析包。我們不會說那個一個更好,我們這里的重點是演示這兩個庫如何為數據處理提供高效和靈活的方法。
我們將介紹的示例是常見的數據分析和操作操作。因此,您可能會經常使用它們。
我們將使用Kaggle上提供的墨爾本住房數據集作為示例。我將使用谷歌Colab(Pandas )和RStudio(data.table)作為開環境。讓我們首先導入庫并讀取數據集。
- # pandas
- import pandas as pd
- melb = pd.read_csv("/content/melb_data.csv")
- # data.table
- library(data.table)
- melb <- fread("datasets/melb_data.csv")
示例1
第一個示例是關于基于數據集中的現有列創建新列。這是特征工程過程中常見的操作。這兩個庫都提供了完成此任務的簡單方法。
- # pandas
- melb["Price_per_area"] = melb["Price"] / melb["Landsize"]
- # data.table
- melb[, Price_per_area := Price / Landsize]

示例2
對于第二個示例,我們通過應用幾個過濾器創建原始數據集的子集。這個子集包括價值超過100萬美元,類型為h的房子。
- # pandas
- subset = melb[(melb.Price > 1000000) & (melb.Type == "h")]
- # data.table
- subset <- melb[Price > 1000000 & Type == "h"]
對于pandas,我們提供dataframe的名稱來選擇用于過濾的列。另一方面,data.table僅使用列名就足夠了。
示例3
在數據分析中使用的一個非常常見的函數是groupby函數。它允許基于一些數值度量比較分類變量中的不同值。
例如,我們可以計算出不同地區的平均房價。為了使示例更復雜一些,我們還對房子類型應用一個過濾器。
- # pandas
- melb[melb.Type == "u"].groupby("Regionname").agg(
- avg_price = ("Price", "mean")
- )
- # data.table
- melb[Type == "u", .(avg_price = mean(Price)), by="Regionname"]

pandas使用groupby函數執行這些操作。對于data.table,此操作相對簡單一些,因為我們只需要使用by參數即可。
示例4
讓我們進一步討論前面的例子。我們求出了房屋的平均價格,但不知道每個地區的房屋數量。
這兩個庫都允許在一個操作中應用多個聚合。我們還可以按升序或降序對結果進行排序。
- # pandas
- melb[melb.Type == "u"].groupby("Regionname").agg(
- avg_price = ("Price", "mean"),
- number_of_houses = ("Price", "count")
- ).sort_values(by="avg_price", ascending=False)
- # data.table
- > melb[
- Type == "u",
- .(avg_price = mean(Price), number_of_houses=.N),
- by="Regionname"
- ][order(-avg_price)]

我們使用計數函數來獲得每組房屋的數量。”。N”可作為data.table中的count函數。
默認情況下,這兩個庫都按升序對結果排序。排序規則在pandas中的ascending參數控制。 data.table中使用減號獲得降序結果。
示例5
在最后一個示例中,我們將看到如何更改列名。例如,我們可以更改類型和距離列的名稱。
類型:HouseType
距離:DistanceCBD
數據集中的distance列表示到中央商務區(CBD)的距離,因此最好在列名中提供該信息。
- # pandas
- melb.rename(columns={"Type": "HouseType",
- "Distance": "DistanceCBD"},
- inplace=True)
- # data.table
- setnames(melb,
- c("Type", "Distance"),
- c("HouseType", "DistanceCBD"))
對于熊貓,我們傳遞了一個字典,該字典將更改映射到rename函數。 inplace參數用于將結果保存在原始數據幀中。
對于data.table,我們使用setnames函數。 它使用三個參數,分別是表名,要更改的列名和新列名。
總結
我們比較了pandas和data.table在數據分析操作過程中常見的5個示例。這兩個庫都提供了簡單有效的方法來完成這些任務。
在我看來,data.table比pandas簡單一點。
需要指出的是,我們在本文中所做的示例只代表了這些庫功能的很小一部分。它們提供了許多函數和方法來執行更復雜的操作。






























