【问题标题】: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 例如

标签: python pandas dataframe series kaggle


【解决方案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() 时不会抛出任何东西?
    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2019-03-01
    相关资源
    最近更新 更多