【问题标题】:How to drop multiple columns without using column names while reading excel file in pandas?在熊猫中读取excel文件时如何在不使用列名的情况下删除多列?
【发布时间】:2022-01-04 07:02:39
【问题描述】:

我正在读取一个 Excel 文件,我想在读取它时删除一些初始行和列。使用 skip_rows 选项删除初始行是一个非常好的选项。但我找不到任何可以帮助我删除初始列的选项。

df1=pd.read_excel(r"file_name.xlsx",
                 skiprows=4)

在我上面的代码中,我可以跳过最初的 4 行。是否有任何类似的选项可以让我在阅读此 excel 时跳过最初的 4 列?

我认为这是一个非常基本的问题,我也尝试找到它的解决方案。但做不到。每个解决方案都使用列名或列总数作为参数。

【问题讨论】:

  • 检查 usecols 参数。您可以将 col 编号指定为整数或字符串,如“A:E”。 pandas.pydata.org/docs/reference/api/pandas.read_excel.html
  • @Ali_Sh 在这个答案中,他们使用列数作为参数。我可以在不使用列数的情况下做到这一点吗?喜欢 range(4:)?
  • @noobmaster 在我建议的链接中还有另一个recommended link。解决问题了吗?
  • 实际上不知何故,所有答案都使用列名或列总数。您提供的第二个链接,他们使用了 range(8) ,这实际上是列数。我正在寻找范围(:,4:)之类的东西。但它不起作用。

标签: python pandas


【解决方案1】:

您可以在阅读过程中将rangeusecols 一起使用:

df1 = pd.read_excel(r"file_name.xlsx", skiprows=4,
                    usecols=range(4, len(pd.read_excel(r"file_name.xlsx").columns)))

【讨论】:

    【解决方案2】:

    如果您的 excel 文件如下所示:

    您可以使用usecols,如下:

    >>> pd.read_excel('data.xlsx', skiprows=4,
                      usecols=lambda x: x if not x.startswith('Unnamed') else None)
    
       ColA  ColB  ColC
    0     1     2     3
    1     4     5     6
    2     7     8     9
    

    更新

    另一个(丑陋的?)方法:在函数之外创建一个计数器。每次调用keepcol函数时,将计数器递减,直到达到0。之后,保留所有列。

    skip_cols = 4
    def keepcol(name):
        global skip_cols
        if skip_cols == 0:
            return name
        skip_cols -= 1
    
    pd.read_excel('data.xlsx', skiprows=4, usecols=keepcol)
    

    【讨论】:

    • 好吧,我的 excel 没有像上面那样的空列。如果我想在不使用列名的情况下删除 colA 和 colB,就像我在不使用行名的情况下删除行一样。
    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 2017-01-19
    • 2015-08-12
    • 2021-06-08
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    相关资源
    最近更新 更多