【问题标题】:using dataframe.apply to call unique function on each column使用 dataframe.apply 在每一列上调用唯一函数
【发布时间】:2018-01-23 19:48:20
【问题描述】:

我一直想做以下工作,以便在pandas.DataFrame 中的每一列上执行pandas.DataFrame.someColumnName.unique() 函数的简单故事。

df.apply(func=unique, axis=0)  # error NameError: name 'unique' is not defined

是否有一些我忽略的技巧可以让这个工作或替代解决方案给出以下做类似的事情但在pandas.DataFrame 的每一列上使用type() 函数。

df.apply(func=lambda x: type(x[0]), axis=0)

请注意,我已经能够完成以下工作,但似乎不是在 python 中制作单行 for 循环的方法,我发现 apply 语句是一个更好的自我记录实现。

for col in df.columns: 
    df[col].unique()

【问题讨论】:

  • 动机是在对新数据集进行探索性数据分析 [eda] 时,我不仅要输出与每列关联的类型,还要输出每列中存在的唯一值的列表。这将定义实现处理空洞/NaN 值和垃圾值的数据整理代码所需的后续步骤。
  • 是的,当传递给 apply 的函数的结果是数据框中不同列的不同大小时,pandas 不喜欢它......我认为这很可能发生在您的数据中。跨度>

标签: python pandas dataframe unique apply


【解决方案1】:

unique不是全局环境中的注册函数,你可以使用set来达到这个目的:

df.apply(set)

或者如果使用unique,请参考pandas,也最好将结果转换为列表,因为不能保证所有列都包含相同数量的唯一元素:

df.apply(lambda x: pd.unique(x).tolist())

【讨论】:

    【解决方案2】:

    如果您需要单线循环,您可以这样做:

    {e:df[e].unique() for e in df.columns}
    

    【讨论】:

    • 这种方法打印 df['colname'].unique() 输出的每一列都合并在一起,而每个输出由 crlf 分隔。 “for col in df.columns: df[col].unique()” 一个线性循环语法和两行语法,每个循环上执行的调用都缩进了,我发现两者都需要执行它后面的任何 python 脚本代码行为了让它执行循环。我发现我可以使用无操作“通过”调用来满足这种需求。这是众所周知的 for 循环预期问题吗?
    猜你喜欢
    • 2015-04-12
    • 2022-08-17
    • 2023-01-19
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多