当我经常争用数据时,我不得不更改数据类型。
例如
In [11]: import pandas as pd
In [12]: import numpy as np
In [13]: df = pd.DataFrame({'col2': {0: 'apples', 1: 'oranges', 2: 'rabbit'}, 'col1': {0: 'white', 1: 'marshmallow', 2: 'bandwagon'}}
)
In [14]: df.dtypes
Out[14]:
col1 object
col2 object
dtype: object
In [15]: for col in cols:
df[col] = df[col].astype('category')
....:
In [16]: df.dtypes
Out[16]:
col1 category
col2 category
dtype: object是否有更多的熊猫友好的方式来做到这一点-例如,使用一个清单理解?我觉得for循环很慢..。
这是我必须做的一件很普通的事情,我只是想知道是否有一个我不知道的成语。
发布于 2016-07-21 13:03:40
我觉得你的解决方案很好。
另一个是:
df[['col1','col2']] = df[['col1','col2']].apply(lambda x: x.astype('category'))时间
In [32]: %timeit (orig(df))
10 loops, best of 3: 27.8 ms per loop
In [33]: %timeit df.apply(lambda x: x.astype('category'))
10 loops, best of 3: 41.5 ms per loop
In [34]: %timeit pd.concat([df[col].astype('category') for col in df], axis=1)
100 loops, best of 3: 18.7 ms per loop计时代码:
df = pd.DataFrame({'col2': ['apples', 'oranges', 'rabbit'],
'col1': ['white', 'marshmallow', 'bandwagon']})
df = pd.concat([df]*1000)
df = pd.concat([df]*100, axis=1)
df.columns = range(df.shape[1])
df[df.columns] = df[df.columns].apply(lambda x: x.astype('category'))
print (df)
df = pd.concat([df[col].astype('category') for col in df], axis=1)
print (df)
def orig(df):
for col in df.columns:
df[col] = df[col].astype('category')
return dfhttps://stackoverflow.com/questions/38504885
复制相似问题