【问题标题】:Python Pandas - Deleting multiple series from a data frame in one commandPython Pandas - 在一个命令中从数据框中删除多个系列
【发布时间】:2012-12-31 01:56:12
【问题描述】:

简而言之...我有一个 Python Pandas 数据框,它是使用“read_table”从 Excel 文件中读取的。我想从数据中保留一些系列,并清除其余部分。我知道我可以使用 'del data['SeriesName']' 一个一个地删除我不想要的内容,但我宁愿指定要保留的内容,而不是指定要删除的内容。

如果最简单的答案是将现有数据框复制到仅包含我想要的系列的新数据框中,然后将现有框架全部删除,我会对该解决方案感到满意......但如果这是确实是最好的方法,有人可以指导我吗?

TIA ...我是 Pandas 的新手。 :)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用DataFrame drop 函数来删除列。您必须传递 axis=1 选项才能使其在列而不是行上工作。请注意,它会返回一个副本,因此您必须将结果分配给新的DataFrame

    In [1]: from pandas import *
    
    In [2]: df = DataFrame(dict(x=[0,0,1,0,1], y=[1,0,1,1,0], z=[0,0,1,0,1]))
    
    In [3]: df
    Out[3]:
       x  y  z
    0  0  1  0
    1  0  0  0
    2  1  1  1
    3  0  1  0
    4  1  0  1
    
    In [4]: df = df.drop(['x','y'], axis=1)
    
    In [5]: df
    Out[5]:
       z
    0  0
    1  0
    2  1
    3  0
    4  1
    

    【讨论】:

    • 这确实很好用,但是在这种情况下,我只需要保留大约 40-50 系列数据中的 5-6 个,并且我要删除的系列可能会根据数据的变化而波动输入数据文件。很高兴学习 .drop 函数的用法 - 谢谢!
    • 我只需要做一些类似于你所做的事情,就我而言,我已经预先计算了我需要删除的东西的列表,然后将列表传递给下降()函数。像魅力一样工作!
    【解决方案2】:

    与 Zelazny7 的回答基本相同——只是指定要保留的内容:

    In [68]: df
    Out[68]: 
       x  y  z
    0  0  1  0
    1  0  0  0
    2  1  1  1
    3  0  1  0
    4  1  0  1
    
    In [70]: df = df[['x','z']]                                                                
    
    In [71]: df
    Out[71]: 
       x  z
    0  0  0
    1  0  0
    2  1  1
    3  0  0
    4  1  1
    

    *编辑*

    您可以通过对Dataframe.columns 对象进行索引/切片来指定大量列。
    type(pandas.Index) 的这个对象可以看作是列标签的dict(具有一些扩展功能)。

    查看以上示例的扩展:

    In [4]: df.columns
    Out[4]: Index([x, y, z], dtype=object)
    
    In [5]: df[df.columns[1:]]
    Out[5]: 
       y  z
    0  1  0
    1  0  0
    2  1  1
    3  1  0
    4  0  1
    
    In [7]: df.drop(df.columns[1:], axis=1)
    Out[7]: 
       x
    0  0
    1  0
    2  1
    3  0
    4  1
    

    【讨论】:

    • @theodros Zelleke,如果我有大约 50 列我想删除和 50 列我想保留怎么办。并且列数可以改变我运行它的每个实例。有没有办法做某种 df.drop(colname1:colname50) 这样一次丢弃大块的 cols
    • @Theodros Zelleke,感谢您提供额外信息,如何删除标签名称而不是列号。所以在你的例子中删除 ['y':'z']
    • 请选择此作为您问题的答案。而且我知道已经有一段时间了,但是@zelazny7 的答案在导入大包时包含一种不好的做法- from pandas import *
    【解决方案3】:

    您还可以使用pandas.read_table 中的usecols 选项指定要保留的列列表。这也加快了加载过程。

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 2019-10-29
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      相关资源
      最近更新 更多