从pandas中的系列创建一个集合

Jul*_*aga 21 python series dataframe pandas kaggle

我有一个从Kaggle的San Fransico工资中提取的数据框:https://www.kaggle.com/kaggle/sf-salaries 我希望创建一组列的值,例如'Status'.

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

a=set(sf['Status'])
print a
Run Code Online (Sandbox Code Playgroud)

根据这个网页,这应该工作. 如何在python中构建一个列表项集?

gre*_*hut 42

如果您只需要获取唯一值列表,则可以使用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}
Run Code Online (Sandbox Code Playgroud)

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


Adr*_*ico 10

对于series具有重复的大尺寸,set(some_series)执行时间将随series尺寸成指数增长。

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

一个简单的示例显示x16执行时间。在此处输入图片说明

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