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

标签 python pandas dataframe types

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

id    name
011    Peter Parker
022    Warners Brother
101    Bruce Wayne

目前它们都是对象类型。

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

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

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

最佳答案

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

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/

相关文章:

python - 为什么数组的直接索引比迭代快得多?

javascript - Flask 应用程序在外部文件中时不执行 javascript

python-3.x - Pandas:如何获取数据帧第一行和最后一行的键(索引)

python - 使用 Matplotlib 和 Pandas 时重命名 X 轴标签

python - 如何将列表转换为具有多列的数据框?

python - 重置列的 MultiIndex 级别

python - 在 Python 中聚类相似字符串的算法?

python - gtk:为什么要执行 Gtk::Main::Iteration?

Python pandas 部分折叠二维矩阵

python - 获取数据框中从一列到另一列的唯一连接