从熊猫系列中创建一个集合

Posted

技术标签:

【中文标题】从熊猫系列中创建一个集合【英文标题】:Create a set from a series in pandas 【发布时间】:2017-01-25 20:49:54 【问题描述】:

我有一个从 Kaggle 的 San Fransico Salaries 中提取的数据框:https://www.kaggle.com/kaggle/sf-salaries 我希望创建一组列的值,例如“状态”。

这是我尝试过的,但它带来了所有记录的列表而不是集合(sf 是我命名数据框的方式)。

a=set(sf['Status'])
print a

根据这个网页,这应该可以工作。 How to construct a set out of list items in python?

【问题讨论】:

你为什么说a是一个列表? 也许我用错了这个词,我指的是它给了我列中的所有值,而不关心它是否是纯 nans 例如 【参考方案1】:

如果您只需要获取唯一值列表,您可以使用unique 方法。 如果你想拥有 Python 的集合,那就做set(some_series)

In [1]: s = pd.Series([1, 2, 3, 1, 1, 4])

In [2]: s.unique()
Out[2]: array([1, 2, 3, 4])

In [3]: set(s)
Out[3]: 1, 2, 3, 4

但是,如果您有 DataFrame,只需从中选择系列 (some_data_frame['<col_name>'])。

【讨论】:

【参考方案2】:

series 的大小较大且带有重复项,set(some_series) 的执行时间将随着 series 的大小呈指数增长。

更好的做法是set(some_series.unique())

一个显示 x16 执行时间的简单示例。

【讨论】:

谁能解释为什么不使用 unique 的情况下执行时间呈指数增长? some_series.unique() 给出了系列中的每个独特项目 = 基本上是一个集合。从一个集合中创建一个集合很快,因为您没有重复项 --> 需要处理的项目更少 --> 需要做的工作更少 --> 快速。 Pandas 在底层主要是 C,也许 set() 与 .unique() 相比没有优化?问题是:如果您的系列已经是独一无二的,这种加速是否仍然有效--> 使用 .unique() 时不会抛出任何东西?

以上是关于从熊猫系列中创建一个集合的主要内容,如果未能解决你的问题,请参考以下文章

如何从熊猫的同一列中创建一个行值数组?

从项目列表中创建特定形状的熊猫数据框

从年份和朱利安日在熊猫中创建日期时间

如何在熊猫中创建数据框视图?

在 for 循环中创建和命名熊猫系列

在熊猫数据框中创建重复列