我有一个熊猫数据框架。我想按升序打印其中一列的唯一值。我是这样做的:

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print a.sort()

问题是我得到的输出是None。


当前回答

另一种方法是使用集合数据类型。

集合的一些特征:集合是无序的,可以包括混合数据类型,集合中的元素不能重复,是可变的。

解决你的问题:

df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
sorted(set(df.A))

列表类型中的答案:

[1, 2, 3, 6, 8]

其他回答

Sort在原地排序,因此不返回任何内容:

In [54]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
a

Out[54]:
array([1, 2, 3, 6, 8], dtype=int64)

所以你必须在调用排序之后再次调用print a。

Eg.:

In [55]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
print(a)

[1 2 3 6 8]

sorted(iterable):从iterable中的项中返回一个新的排序列表。 代码

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print(sorted(a))

输出

[1, 2, 3, 6, 8]

今天我自己也遇到了这个问题。我认为你的代码返回'None'(正是我通过使用相同的方法得到的)的原因是

a.sort()

是调用sort函数来改变列表a。在我的理解中,这是一个修改命令。要查看结果,必须使用print(a)。

我的解决方案,当我试图把所有东西都保存在熊猫里的时候:

pd.Series(df['A'].unique()).sort_values()

你也可以使用drop_duplicate()而不是unique()

df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].drop_duplicates()
a.sort()
print a

我建议使用numpy的sort,因为它是熊猫在后台做的事情:

import numpy as np
np.sort(df.A.unique())

但在熊猫身上做所有的事情也是有效的。