繁体   English   中英

没有从熊猫value_counts()获得0索引

[英]Not getting 0 index from pandas value_counts()

total_val_count = dataset[attr].value_counts()      
    for i in range(len(total_val_count.index)):
        print total_val_count[i]

我编写了这段代码,它计算数据帧中某个属性的所有不同值的出现次数。 我面临的问题是我无法通过使用索引0访问第一个值。我在第一个循环运行本身中遇到KeyError:0错误。

total_val_count包含正确的值,如下所示:

34 2887
4 2708
13 2523
35 2507
33 2407
3 2404
36 2382
26 2378
16 2282
22 2187
21 2141
12 2104
25 2073
5 2052
15 2044
17 2040
14 2027
1984年2月28日
1980年27日
1979年23日
1960年2月24日
1953年30日
1936年2月29日
1884年3月31日
18 1877年
7 1858
37 1767
20 1762年
11 1740
8 1722
6 1693
32 1692
10 1662年
9 1576
19 1308
2 1266
1175
38 63
dtype:int64

total_val_count是一个系列。 系列的索引是dataset[attr]的值,而系列中的值是dataset[attr]中相关值出现的次数。

当您使用total_val_count[i]为Series编制索引时,Pandas将在索引中查找i并返回关联的值。 换句话说, total_val_count[i]是按索引值而不是total_val_count[i]索引。 将系列视为从索引到值的映射。 当使用普通索引时,例如total_val_count[i] ,它的行为更像是dict不是list

您收到一个KeyError,因为0不是索引中的值。 total_val_count.iloc[i]索引,请使用total_val_count.iloc[i]

话虽这么说,不建议for i in range(len(total_val_count.index))使用for i in range(len(total_val_count.index))或者不建议for i in range(len(total_val_count))相同的处理。 代替

for i in range(len(total_val_count)):
    print(total_val_count.iloc[i])

你可以用

for value in total_val_count.values:
    print(value)

这更具可读性,并且允许您将所需的值作为变量value来访问,而不是麻烦的total_val_count.iloc[i]

这是一个示例,显示了如何遍历值,键,键和值两者:

import pandas as pd

s = pd.Series([1, 2, 3, 2, 2])
total_val_count = s.value_counts()

print(total_val_count)
# 2    3
# 3    1
# 1    1
# dtype: int64

for value in total_val_count.values:
    print(value)
    # 3
    # 1
    # 1

for key in total_val_count.keys():
    print(key)
    # 2
    # 3
    # 1

for key, value in total_val_count.iteritems():
    print(key, value)
    # (2, 3)
    # (3, 1)
    # (1, 1)

for i in range(len(total_val_count)):
    print(total_val_count.iloc[i])
    # 3
    # 1
    # 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM