首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一种将列列表更改为不同数据类型的更多的pythonic (或pandorable)方法

一种将列列表更改为不同数据类型的更多的pythonic (或pandorable)方法
EN

Stack Overflow用户
提问于 2016-07-21 12:56:13
回答 1查看 964关注 0票数 2

当我经常争用数据时,我不得不更改数据类型。

例如

代码语言:javascript
运行
复制
    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循环很慢..。

这是我必须做的一件很普通的事情,我只是想知道是否有一个我不知道的成语。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 13:03:40

我觉得你的解决方案很好。

另一个是:

代码语言:javascript
运行
复制
df[['col1','col2']] = df[['col1','col2']].apply(lambda x: x.astype('category'))

时间

代码语言:javascript
运行
复制
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

计时代码:

代码语言:javascript
运行
复制
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 df
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38504885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档