Python:构建 Pandas 数据框的对象
Posted
技术标签:
【中文标题】Python:构建 Pandas 数据框的对象【英文标题】:Python: build object of Pandas dataframes 【发布时间】:2018-12-09 05:49:07 【问题描述】:我有一个包含dtype=object
的数据框,即分类变量,我想知道每个级别的计数。我希望结果是所有分类变量的漂亮总结。
为了实现上述目标,我尝试了以下方法:
(第 1 行)获取所有对象类型变量的名称
(第 2 行)计算每个级别的观察次数(a
、b
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
我不确定如何优雅地获得以下打印所有字符串列计数的结果。像这样(仅显示v1
和v4
,但应该能够为可变数量的列打印这样的结果):
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 数据框的 dtypes 信息
Unpickling 包含 pandas 数据框的字典会引发 AttributeError:“Dataframe”对象没有属性“_data”