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

示例2
對于第二個示例,我們通過應用幾個過濾器創(chuàng)建原始數(shù)據(jù)集的子集。這個子集包括價值超過100萬美元,類型為h的房子。
- # pandas
- subset = melb[(melb.Price > 1000000) & (melb.Type == "h")]
- # data.table
- subset <- melb[Price > 1000000 & Type == "h"]
對于pandas,我們提供dataframe的名稱來選擇用于過濾的列。另一方面,data.table僅使用列名就足夠了。
示例3
在數(shù)據(jù)分析中使用的一個非常常見的函數(shù)是groupby函數(shù)。它允許基于一些數(shù)值度量比較分類變量中的不同值。
例如,我們可以計算出不同地區(qū)的平均房價。為了使示例更復雜一些,我們還對房子類型應用一個過濾器。
- # 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函數(shù)執(zhí)行這些操作。對于data.table,此操作相對簡單一些,因為我們只需要使用by參數(shù)即可。
示例4
讓我們進一步討論前面的例子。我們求出了房屋的平均價格,但不知道每個地區(qū)的房屋數(shù)量。
這兩個庫都允許在一個操作中應用多個聚合。我們還可以按升序或降序對結果進行排序。
- # 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)]

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