首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理大熊猫列表:申请(pd.Series)不起作用--另一种解决方案?

处理大熊猫列表:申请(pd.Series)不起作用--另一种解决方案?
EN

Stack Overflow用户
提问于 2017-09-24 15:00:44
回答 2查看 9.1K关注 0票数 2

我有一个如下结构的数据集:

代码语言:javascript
复制
mydic = {'2017-9-11': {'Type1': [15, 115452.0, 3], 'Type2': [47, 176153.0, 4], 'Type3': [0, 0, 0]}, '2017-9-12': {'Type1': [26, 198223.0, 5], 'Type2': [39, 178610.0, 6], 'Type3': [0, 0, 0]}}
df = pd.DataFrame.from_dict(mydic, orient='index')

我需要将列表中的值拆分为不同的列,并将它们按类型分组。我就是这样做的:

代码语言:javascript
复制
df_new = df[list(df)].unstack().apply(pd.Series)
df_new.head()

它的作用是:

代码语言:javascript
复制
                    0       1           2
Type1   2017-9-11   15.0    115452.0    3.0
        2017-9-12   26.0    198223.0    5.0
Type3   2017-9-11   0.0     0.0         0.0
        2017-9-12   0.0     0.0         0.0
Type2   2017-9-11   47.0    176153.0    4.0

但是,当我将这段代码应用于更大的现实数据集时,apply(pd.Series)似乎不起作用,我只得到了一列0,其中列出了如下所示的值:

代码语言:javascript
复制
                    0    
Type1  2017-9-11    [15, 115452.0, 3]
       2017-9-12    [26, 198223.0, 5]
Type2  2017-9-11    [47, 176153.0, 4]
       2017-9-12    [39, 178610.0, 6]
Type3  2017-9-11            [0, 0, 0]

有人能提出什么可能是错的吗?或者提出另一种解决方案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-24 15:02:59

它认为更快的解决方案是DataFrame构造函数,参见timings

代码语言:javascript
复制
s = df.unstack()
df = pd.DataFrame(s.values.tolist(), index=s.index)
print (df)
                  0         1  2
Type1 2017-9-11  15  115452.0  3
      2017-9-12  26  198223.0  5
Type2 2017-9-11  47  176153.0  4
      2017-9-12  39  178610.0  6
Type3 2017-9-11   0       0.0  0
      2017-9-12   0       0.0  0

编辑:

如果值是字符串:

代码语言:javascript
复制
df = df.unstack().str.strip('[]').str.split(', ', expand=True).astype(float)
print (df)
                    0         1    2
Type1 2017-9-11  15.0  115452.0  3.0
      2017-9-12  26.0  198223.0  5.0
Type2 2017-9-11  47.0  176153.0  4.0
      2017-9-12  39.0  178610.0  6.0
Type3 2017-9-11   0.0       0.0  0.0
      2017-9-12   0.0       0.0  0.0

或者是可以将值转换为list的:

代码语言:javascript
复制
import ast

s = df.unstack().apply(ast.literal_eval)
df = pd.DataFrame(s.values.tolist(), index=s.index).astype(float)
print (df)
                    0         1    2
Type1 2017-9-11  15.0  115452.0  3.0
      2017-9-12  26.0  198223.0  5.0
Type2 2017-9-11  47.0  176153.0  4.0
      2017-9-12  39.0  178610.0  6.0
Type3 2017-9-11   0.0       0.0  0.0
      2017-9-12   0.0       0.0  0.0
票数 2
EN

Stack Overflow用户

发布于 2017-09-24 16:01:44

对于数据帧,指出要申请的女巫列。

代码语言:javascript
复制
df.unstack().to_frame()[0].apply(pd.Series)

Out[545]: 
                    0         1    2
Type2 2017-9-11  47.0  176153.0  4.0
      2017-9-12  39.0  178610.0  6.0
Type1 2017-9-11  15.0  115452.0  3.0
      2017-9-12  26.0  198223.0  5.0
Type3 2017-9-11   0.0       0.0  0.0
      2017-9-12   0.0       0.0  0.0

中断:

代码语言:javascript
复制
df1=df.unstack().to_frame()
df1
Out[546]: 
                                 0
Type2 2017-9-11  [47, 176153.0, 4]
      2017-9-12  [39, 178610.0, 6]
Type1 2017-9-11  [15, 115452.0, 3]
      2017-9-12  [26, 198223.0, 5]
Type3 2017-9-11          [0, 0, 0]
      2017-9-12          [0, 0, 0]

然后做apply

应用(pd.Series)

代码语言:javascript
复制
Out[550]: 
                    0         1    2
Type2 2017-9-11  47.0  176153.0  4.0
      2017-9-12  39.0  178610.0  6.0
Type1 2017-9-11  15.0  115452.0  3.0
      2017-9-12  26.0  198223.0  5.0
Type3 2017-9-11   0.0       0.0  0.0
      2017-9-12   0.0       0.0  0.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46391430

复制
相关文章

相似问题

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