Python:构建 Pandas 数据框的对象

Posted

技术标签:

【中文标题】Python:构建 Pandas 数据框的对象【英文标题】:Python: build object of Pandas dataframes 【发布时间】:2018-12-09 05:49:07 【问题描述】:

我有一个包含dtype=object 的数据框,即分类变量,我想知道每个级别的计数。我希望结果是所有分类变量的漂亮总结。

为了实现上述目标,我尝试了以下方法:

(第 1 行)获取所有对象类型变量的名称

(第 2 行)计算每个级别的观察次数(ab of v1

(第 3 行)将列重命名为“count”

stringCol = list(df.select_dtypes(include=['object'])) # list object of categorical variables
a = df.groupby(stringCol[0]).agg(stringCol[0]: 'count')
a = a.rename(index=str, columns=stringCol[0]: 'count'); a
    count
v1  
a   1279
b   2382

我不确定如何优雅地获得以下打印所有字符串列计数的结果。像这样(仅显示v1v4,但应该能够为可变数量的列打印这样的结果):

    count       count
v1           v4
a   1279     l  32
b   2382     u  3055
             y  549

我能想到的做法是:

    选择stringCol的一个元素 计算每组列的计数。 将结果存储在 Pandas 数据框中。 将 Pandas 数据框存储在对象中(列表?) 重复 如果stringCol 的最后一个元素完成,则中断。

但一定有比这更好的方法,只是不知道该怎么做。

【问题讨论】:

【参考方案1】:

我认为最简单的就是使用循环:

df = pd.DataFrame('A':list('abaaee'),
                   'B':list('abbccf'),
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   'F':list('aacbbb'))

print (df)
   A  B  C  D  E  F
0  a  a  7  1  5  a
1  b  b  8  3  3  a
2  a  b  9  5  6  c
3  a  c  4  7  9  b
4  e  c  2  1  2  b
5  e  f  3  0  4  b

stringCol = list(df.select_dtypes(include=['object']))

for c in stringCol:
    a = df[c].value_counts().rename_axis(c).to_frame('count')
    #alternative
    #a = df.groupby(c)[c].count().to_frame('count')
    print (a)

   count
A       
a      3
e      2
b      1
   count
B       
b      2
c      2
a      1
f      1
   count
F       
b      3
a      2
c      1

对于list of DataFrames,请使用list comprehension

dfs = [df[c].value_counts().rename_axis(c).to_frame('count') for c in stringCol]
print (dfs)

[   count
A       
a      3
e      2
b      1,    count
B       
b      2
c      2
a      1
f      1,    count
F       
b      3
a      2
c      1]

【讨论】:

是的,这好多了。不知道这些功能,并且在不知道相关关键术语的情况下很难通过谷歌了解它们的存在。有没有办法让它们并排打印以避免滚动结果?相关的 bc 可能有 1x10^n 数量级的列,其中 n>=2 @user2205916 - 是的,但有点复杂,请查看this 为了使用您发布的链接中的解决方案,我必须通过循环为每次迭代创建一个数据框。然后,我想我必须将每个数据帧存储到另一个对象中(会是什么?) 您可以查看this 谢谢,您对完善这一点很有帮助。 .value_counts(normalize=True) 实际上会产生浮点数,因为它给出了比例。即 0.9 值为“真”,0.1 值为“假”

以上是关于Python:构建 Pandas 数据框的对象的主要内容,如果未能解决你的问题,请参考以下文章

python--pandas分组聚合

如何使用 Python/Pandas 将数据框的其他行合并到当前行

Python pandas 数据框的str列内置的方法详解

保存和导出 python pandas 数据框的 dtypes 信息

Unpickling 包含 pandas 数据框的字典会引发 AttributeError:“Dataframe”对象没有属性“_data”

使用 matplotlib 绘制堆积条形图,保持 pandas 数据框的顺序,因为它使用 python