我在大型数据帧上使用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
显示dtype
为int64
,如果它有字符串值,则为1/2
其中也nan
和f = codecs.open("gabili" + '.txt', mode="w", encoding="utf-16")
reload(sys)
sys.setdefaultencoding('utf8')
f.write(u"[HELLO] *ASDASD* /(&) \n")
?答案 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')