gpt4 book ai didi

python - 将 pandas 列从对象转换为字符串或 int/float 类型是否有必要或有益?

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:53 24 4
gpt4 key购买 nike

我有一个带有两个变量的 pandas df:

id    name
011 Peter Parker
022 Warners Brother
101 Bruce Wayne

目前都是object类型

假设我想通过使用某些条件进行过滤来创建较小的数据帧

df_small = df.loc[df['id']=='011']
df_small2 = df.loc[df['name']=='Peter Parker']

我想到也看到了people将对象类型列转换为其他特定数据类型。我的问题是,如果我已经可以根据字符串比较(如上所述)过滤它们,我还需要这样做吗?将它们转换为特定的字符串或 int/float 类型有什么好处?

最佳答案

您询问了从 stringobject 数据类型转换的好处。至少有 2 个我马上就能想到。以下面的数据框为例:

df = pd.DataFrame({'int_col':np.random.randint(0,10,10000), 'str_col':np.random.choice(list('1234567980'), 10000)})

>>> df.head()
int_col str_col
0 7 0
1 0 1
2 1 8
3 6 1
4 6 0

此数据框包含 10000 行,并且有一个 int 列和一个用于显示的 object(即字符串)列。

内存优势:

整数列比对象列占用的内存少很多:

>>> import sys
>>> sys.getsizeof(df['int_col'])
80104
>>> sys.getsizeof(df['str_col'])
660104

速度优势:

由于您的示例是关于过滤的,因此请看一下过滤整数而不是字符串时的速度差异:

import timeit

def filter_int(df=df):
return df.loc[df.int_col == 1]


def filter_str(df=df):
return df.loc[df.str_col == '1']

>>> timeit.timeit(filter_int, number=100) / 100
0.0006298311000864488
>>> timeit.timeit(filter_str, number=100) / 100
0.0016585511100129225

在某些情况下,这种类型的速度差异可能会显着加快您的代码速度。

关于python - 将 pandas 列从对象转换为字符串或 int/float 类型是否有必要或有益?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53176322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com