【问题标题】:printing list of categories as a column将类别列表打印为列
【发布时间】:2016-05-21 19:21:51
【问题描述】:

我以 pandas 文档为例。假设我读完一个excel文件后有一个系列

import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")

我知道我可以通过

获得不同的类别
scat=s.cat.categories
print scat

我得到的

Index([u'a', u'b', u'c'], dtype='object')

我想知道什么是使此列表显示为列的好方法。像

a
b
c

我可以通过np.asarray 摆脱u',但仍然没有得到我需要的格式。

【问题讨论】:

  • 您使用的是 python 2.x 吗?对于 python 3.4.3,我得到了没有 u 的结果。
  • 是的,我正在使用 python 2。有趣的是,你没有出现在 python 3x 中。
  • 你能检查一下type 的“字符串”吗?比如`type(scat[0])
  • 当我这样做时会得到 str

标签: python list pandas categories series


【解决方案1】:

我认为没问题-'u' 表示unicode 字符串:

s = pd.Series(["a","b","c","a"], dtype="category")
print s
0    a
1    b
2    c
3    a
dtype: category
Categories (3, object): [a, b, c]

scat=s.cat.categories
print scat
Index([u'a', u'b', u'c'], dtype='object')

print scat[0]
a

print type(scat[0])
<type 'str'>   

如果您想打印不带循环的列,请使用numpy reshape:

print len(scat)
3
print scat.values.reshape(len(scat),1)
[['a']
 ['b']
 ['c']]

【讨论】:

  • 这给了我整个数据框。我需要的只是打印的唯一类别。所以 a 应该只出现一次。
【解决方案2】:

当您说“出现”为列时,我不确定您的意思。

您可以通过以下方式创建列表而不是索引:

>>> s.cat.categories.tolist()
['a', 'b', 'c']

或者您可以使用 for 循环简单地将它们打印在列结构中:

for c in s.cat.categories:
    print c

a
b
c

或者您可以创建一个系列(或数据框):

>>> pd.Series(s.cat.categories)
0    a
1    b
2    c
dtype: object

>>> pd.DataFrame(s.cat.categories)
   0
0  a
1  b
2  c

【讨论】:

  • 谢谢,这正是我一直在寻找的,这就是我的意思是“出现”为列。并不是说我想到使用循环,但我认为可能有一种更简单的方法可以在没有循环的情况下实现它
  • 完美。 Series 和 DataFrames 解决方案很棒!很高兴学习。
  • 当我使用 pd.DataFrame(scat) 与打印 pd.DataFrame(scat) 时,输出格式会发生变化。基本上 print 命令会删除包含输出的漂亮表。知道为什么吗?
猜你喜欢
  • 1970-01-01
  • 2015-11-06
  • 2012-03-21
  • 2019-09-19
  • 2014-10-13
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
相关资源
最近更新 更多