pandas .value_counts()中特定值的返回计数?

时间:2017-04-05 06:12:23

标签: pandas

假设跑熊猫' dataframe [' prod_code']。value_counts()并将结果存储为' df'。操作输出:

125011  90300
   762  72816
  None  55512
  7156  14892 
 75162   8825

如何提取无计数?我希望结果是55512。

我已经尝试了

>>> df.loc[df.index.isin(['None'])]
>>> Series([], Name: prod_code, dtype: int64)

以及

>>> df.loc['None']
>>> KeyError: 'the label [None] is not in the [index]'

2 个答案:

答案 0 :(得分:2)

您似乎需要None,而不是字符串'None'

df.loc[df.index.isin([None])]

df.loc[None]

编辑:

如果需要检查索引中的NaN

print (s1.loc[np.nan])
#or
print (df[pd.isnull(df.index)])

样品:

s = pd.Series(['90300', '90300', '8825', '8825', '8825', None, np.nan])
s1 = s.value_counts(dropna=False)
print (s1)
8825     3
90300    2
NaN      2
dtype: int64

print (s1[pd.isnull(s1.index)])
NaN    2
dtype: int64
print (s1.loc[np.nan])
2
print (s1.loc[None])
2

EDIT1:

用于剥离空格:

s = pd.Series(['90300', '90300', '8825', '8825', '8825', 'None ', np.nan])
print (s)
0    90300
1    90300
2     8825
3     8825
4     8825
5    None 
6      NaN
dtype: object

s1 = s.value_counts()
print (s1)
8825     3
90300    2
None     1
dtype: int64

s1.index = s1.index.str.strip()
print (s1.loc['None'])
1

答案 1 :(得分:1)

一些事情

  1. pd.Series([None] * 2 + [1] * 3).value_counts()会自动删除None
  2. pd.Series([None] * 2 + [1] * 3).value_counts(dropna=False)None转换为np.NaN
  3. 这告诉我你的None是一个字符串。但由于df.loc['None']不起作用,我怀疑你的字符串周围有空格。

    尝试:

    df.filter(regex='None', axis=0)
    

    或者:

    df.index = df.index.to_series().str.strip().combine_first(df.index.to_series())
    df.loc['None']
    

    所有这一切,我很好奇如何在索引中引用np.NaN

    s = pd.Series([1, 2], [0, np.nan])
    s.iloc[s.index.get_loc(np.nan)]
    
    2