Fra*_* M. 9 python r dataframe pandas data.table
为了理解我的问题,我首先要指出的是,R数据表不仅仅是具有语法糖的R数据帧,还存在重要的行为差异:数据表中的列引用/引用修改可以避免在内存中复制整个对象(参见示例)在这个quora答案中)就像数据帧中的情况一样.
我曾经多次发现,data.table行为产生的速度和记忆差异是一个关键因素,它允许人们使用一些大数据集,而这种data.frame行为是不可能的.
因此,我想知道的是:在Python中,Pandas'数据帧在这方面的表现如何?
额外的问题:如果Pandas的数据帧更接近R数据帧而不是R数据表,并且具有相同的下行(分配/修改列时对象的完整副本),是否有相当于R的data.table包的Python ?
每条评论请求编辑:代码示例:
R数据帧:
# renaming a column
colnames(mydataframe)[1] <- "new_column_name"
Run Code Online (Sandbox Code Playgroud)
R数据表:
# renaming a column
library(data.table)
setnames(mydatatable, 'old_column_name', 'new_column_name')
Run Code Online (Sandbox Code Playgroud)
在熊猫:
mydataframe.rename(columns = {'old_column_name': 'new_column_name'}, inplace=True)
Run Code Online (Sandbox Code Playgroud)
jak*_*vdp 12
data.frame在这方面,熊猫的运作更像.你可以使用memory_profiler包检查这个; 这是在Jupyter笔记本中使用它的一个例子:
首先定义一个测试它的程序:
%%file df_memprofile.py
import numpy as np
import pandas as pd
def foo():
x = np.random.rand(1000000, 5)
y = pd.DataFrame(x, columns=list('abcde'))
y.rename(columns = {'e': 'f'}, inplace=True)
return y
Run Code Online (Sandbox Code Playgroud)
然后加载内存分析器并运行+ profile该功能
%load_ext memory_profiler
from df_memprofile import foo
%mprun -f foo foo()
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
Filename: /Users/jakevdp/df_memprofile.py
Line # Mem usage Increment Line Contents
================================================
4 66.1 MiB 66.1 MiB def foo():
5 104.2 MiB 38.2 MiB x = np.random.rand(1000000, 5)
6 104.4 MiB 0.2 MiB y = pd.DataFrame(x, columns=list('abcde'))
7 142.6 MiB 38.2 MiB y.rename(columns = {'e': 'f'}, inplace=True)
8 142.6 MiB 0.0 MiB return y
Run Code Online (Sandbox Code Playgroud)
你可以看到几件事:
在y创建时,它只是原始数组周围的光包装:即没有数据被复制.
当y重命名列时,它会导致内存中整个数据数组的重复(它x与第一次创建的时间相同,增加了38MB ).
因此,除非我遗漏了某些东西,否则看起来Pandas的操作更像R的数据框而不是R的数据表.
编辑:请注意,它rename()有一个copy控制此行为的参数,默认为True.例如,使用这个:
y.rename(columns = {'e': 'f'}, inplace=True, copy=False)
Run Code Online (Sandbox Code Playgroud)
...导致就地操作而不复制数据.
或者,您可以columns直接修改属性:
y.columns = ['a', 'b', 'c', 'd', 'f']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |