为什么value_counts不显示所有值?

时间:2016-08-15 10:38:45

标签: python pandas

我在大型数据帧上使用pandas 0.18.1。我对value_counts()的行为感到困惑。这是我的代码:

print df.phase.value_counts()
def normalise_phase(x):
    print x
    return int(str(x).split('/')[0])
df['phase_normalised'] = df['phase'].apply(normalise_phase)

这将打印以下内容:

2      35092
3      26248
1      24646
4      22189
1/2     8295
2/3     4219
0       1829
dtype: int64
1
nan

两个问题:

  • nan为什么normalise_phase打印为nan的输出 未在value_counts中列为值?
  • 为什么value_counts显示dtypeint64,如果它有字符串值,则为1/2 其中也nanf = codecs.open("gabili" + '.txt', mode="w", encoding="utf-16") reload(sys) sys.setdefaultencoding('utf8') f.write(u"[HELLO] *ASDASD* /(&) \n")

1 个答案:

答案 0 :(得分:4)

您需要传递dropna=False以便计算NaN(请参阅docs)。 int64是系列的dtype(值的计数)。值本身就是索引。如果你检查,索引的dtype将是对象。

ser = pd.Series([1, '1/2', '1/2', 3, np.nan, 5])

ser.value_counts(dropna=False)
Out: 
1/2    2
5      1
3      1
1      1
NaN    1
dtype: int64

ser.value_counts(dropna=False).index
Out: Index(['1/2', 5, 3, 1, nan], dtype='object')