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