我有一个带有两个变量的 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类型有什么好处?
最佳答案
您询问了从 string
或 object
数据类型转换的好处。我立刻就能想到至少有两个。以以下数据框为例:
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/