查找列中的唯一值,然后对它们进行排序
Posted
技术标签:
【中文标题】查找列中的唯一值,然后对它们进行排序【英文标题】:Find the unique values in a column and then sort them 【发布时间】:2015-11-11 08:53:15 【问题描述】:我有一个熊猫数据框。我想按升序打印其中一列的唯一值。我就是这样做的:
import pandas as pd
df = pd.DataFrame('A':[1,1,3,2,6,2,8])
a = df['A'].unique()
print a.sort()
问题是我得到了一个None
的输出。
【问题讨论】:
a.sort()
修改 a
并且不返回任何内容,因此替换为:a.sort(); print a
【参考方案1】:
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]
【讨论】:
如果您的列包含具有不明确的布尔值的数据,例如 pandas 的 NAType - sorted() 将引发 TypeError,这不起作用【参考方案2】: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)
所以你必须在拨打sort
之后再次拨打print a
。
例如:
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]
【讨论】:
【参考方案3】:您也可以使用 drop_duplicates() 代替 unique()
df = pd.DataFrame('A':[1,1,3,2,6,2,8])
a = df['A'].drop_duplicates()
a.sort()
print a
【讨论】:
在 14107693 行的数据帧上发现drop_duplicates()
比 unique() 快 3 倍 [Pandas 0.18]
df['A'].drop_duplicates().sort_values()
是我的最爱【参考方案4】:
我更喜欢oneliner:
print(sorted(df['Column Name'].unique()))
【讨论】:
【参考方案5】:今天我自己遇到了这个问题。我认为您的代码返回“无”(正是我使用相同方法得到的)的原因是
a.sort()
正在调用排序函数来改变列表a。在我的理解中,这是一个修改命令。要查看结果,您必须使用 print(a)。
我的解决方案,因为我试图将所有内容都保存在 pandas 中:
pd.Series(df['A'].unique()).sort_values()
【讨论】:
我喜欢pandas
解决方案,因为它将NaN
值放在最后,并且可以处理混合类型的数组。【参考方案6】:
我建议使用 numpy 的排序,因为无论如何 pandas 在后台正在做的事情:
import numpy as np
np.sort(df.A.unique())
但是在 pandas 中做所有事情也是有效的。
【讨论】:
【参考方案7】:最快的代码
对于大数据框:
df['A'].drop_duplicates().sort_values()
【讨论】:
如果你为你的主张提供证据,这个答案会更有趣【参考方案8】:另一种方法是使用 set 数据类型。
集合的一些特性:集合是无序的,可以包含混合数据类型,集合中的元素不能重复,是可变的。
解决您的问题:
df = pd.DataFrame('A':[1,1,3,2,6,2,8])
sorted(set(df.A))
列表中的答案输入:
[1, 2, 3, 6, 8]
【讨论】:
以上是关于查找列中的唯一值,然后对它们进行排序的主要内容,如果未能解决你的问题,请参考以下文章