我有一个pandas数据帧。我想按升序打印其中一列的唯一值。我就是这样做的:
import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print a.sort()
问题在于我输出了None
。
答案 0 :(得分:53)
sorted
从iterable中的项目返回一个新的排序列表。
的 CODE 强>
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]
答案 1 :(得分:11)
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
后再次致电sort
。
例如:
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]
答案 2 :(得分:5)
您也可以使用drop_duplicates()代替unique()
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].drop_duplicates()
a.sort()
print a
答案 3 :(得分:3)
我建议使用numpy的排序,因为无论如何大熊猫在后台做的是:
import numpy as np
np.sort(df.A.unique())
但是在熊猫中做所有事情也是有效的。
答案 4 :(得分:3)
我更喜欢oneliner:
print(sorted(df['Column Name'].unique()))
答案 5 :(得分:2)
今天我自己回答了这个问题。我认为您的代码返回“ None”(正是我使用相同方法获得的结果)的原因是
a.sort()
调用sort函数对列表a进行变异。以我的理解,这是一个修改命令。要查看结果,您必须使用print(a)。
我的解决方案,因为我试图将所有东西都保留在大熊猫中:
pd.Series(df['A'].unique()).sort_values()
答案 6 :(得分:0)
另一种方法是使用 set 数据类型。
集合的某些特征:集合是无序的,可以包含混合数据类型,集合中的元素不能重复,是可变的。
解决您的问题:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
sorted(set(df.A))
列表类型的答案:
[1, 2, 3, 6, 8]