【问题标题】:Skip NaN values while counting data in python Pandas在 python Pandas 中计算数据时跳过 NaN 值
【发布时间】:2012-10-13 06:54:27
【问题描述】:

我正在使用 pandas 来获取 Text 类型数据的计数,并找出给定数据中的前 5 个。

输入文件如下:

Gears of war 3
Gears of war
Assassin creed
.......
.......
Crysis 2
Gears of war3
Sims

我的输出如下:

{
    'Gears of War 3': 6,
    'Batman': 5,
    'gears of war 3': 4,
    'Rocksmith': 5,
    'nan': 32870
}

我希望我的代码跳过对 csv 文件中的 nan 值进行计数。

我的代码如下:

data = pandas.read_csv('D:\my_file.csv')

for colname, dtype in data.dtypes.to_dict().iteritems():
    if dtype == 'object':
        print colname
        count = Counter(data[colname])
        d = dict((str(k), v) for k, v in count.iteritems())
        f = dict(sorted(d.iteritems(), key=lambda item: item[1], reverse = True)[:5])

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以从 Counter 实例中删除 nan 项目,该实例是类字典对象:

    from numpy import nan
    del count[nan]
    

    顺便说一句,您可以使用Counter.most_common 方法:

    f = count.most_common(5)
    

    【讨论】:

    • Christopher 非常感谢您的快速回复 del count['nan'] 不起作用.. 我试过了
    • 为什么要迭代框架而不是使用现有方法?还是我错过了什么?
    • user1667967,我以为nan是用字符串"nan"表示的,其实是numpy.nan;我编辑了我的答案
    【解决方案2】:

    使用value_counts() 计算非Nan 值:

            one       two     three
    a  0.196508 -0.465768 -0.710062
    b       NaN       NaN       NaN
    c  0.532602  1.835499  0.465047
    d       NaN       NaN       NaN
    e  0.175336 -0.471934 -1.517812
    f -2.392756 -0.021330 -0.239647
    g       NaN       NaN       NaN
    h -0.612554  0.238613 -1.060184
    
    df2['one'].value_counts()
    
     0.532602    1
     0.196508    1
     0.175336    1
    -0.612554    1
    -2.392756    1
    

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 1970-01-01
      • 2015-03-26
      • 2020-05-29
      • 2016-04-04
      • 2015-07-15
      • 2014-09-22
      • 1970-01-01
      相关资源
      最近更新 更多