【问题标题】:Drop columns of DataFrames from a list of DataFrames using List Comprehension (Pandas)使用 List Comprehension (Pandas) 从 DataFrames 列表中删除 DataFrames 列
【发布时间】:2017-12-25 06:05:34
【问题描述】:

我有一个具有相同列和不同值的 DataFrame 列表。我想在 pandas 的一行中从 DataFrames 列表中删除一些列。

到目前为止,我试过了(dfs 有数据框列表)

dfs.drop([col for col in ['var1', 'var2'] if col in dfs], axis=1, inplace=True)

dfs[dfs.drop([col for col in ['var1', 'var2'] if col in dfs], axis=1, inplace=True)]

两者都给出相同的错误:

AttributeError: 'list' 对象没有属性 'drop'

type(dfs)
>> list

但是,当我可以使用for 循环遍历列表dfs 中的每个DataFRame 时,我可以删除这些列。

如何以熊猫的列表理解方式做到这一点?

【问题讨论】:

  • 但是dfs 是列表,而不是单个数据框。
  • 列表推导式不是解决这个问题的惯用方法。
  • dfs 是一个数据帧列表
  • @COLDSPEED 好的,我想知道我是否可以在列表理解中做。谢谢建议,我会继续使用常规的for循环
  • @i.n.n.m 并不是说​​你做不到……你可以。但为什么呢?

标签: python list pandas dataframe list-comprehension


【解决方案1】:

假设您要删除 ['var1', 'var2'] 列,并且您的数据框具有相同的列,您应该使用 for 循环。

for df in dfs:
    df.drop(['var1', 'var2'], axis=1, inplace=True)

或者,你也可以使用这个:

dfs = [df.drop(['var1', 'var2'], axis=1) for df in dfs]

省略inplace=True 将导致df.drop 返回一个 数据帧,而不是就地更新并返回None。

【讨论】:

  • @AdarshChavakula 在使用可变对象(如数据框)时,您直接使用的是引用,而不是副本。它确实有效。
  • 作为练习,创建df,然后将df 分配给df1。尝试在df1 中删除一列,更改也会反映在df 中。
  • @COLDSPEED 谢谢,dfs = [df.drop(['var1', 'var2'], axis=1) for df in dfs] 列表理解方式工作得很好:)
  • @i.n.n.m 我仍然站在循环中,但是,嘿,不管工作如何完成,对吧? ;) 给你更多的力量。
  • inplace=True 的名称具有误导性——在内部,该方法创建了一个新的(子)DataFrame,然后调用_update_inplace,它将生成的DataFrame 的_data 复制回调用DataFrame 的_data 属性. inplace=True 选项保持向后兼容性,但由于其误导性,probably should not recommended for use going forward
猜你喜欢
  • 2018-02-09
  • 2014-02-05
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 2020-02-11
  • 2018-06-25
  • 2017-06-15
  • 1970-01-01
相关资源
最近更新 更多