如何使用 Pandas 从 Excel 中读取某些列 - Python

Posted

技术标签:

【中文标题】如何使用 Pandas 从 Excel 中读取某些列 - Python【英文标题】:how to read certain columns from Excel using Pandas - Python 【发布时间】:2016-02-12 19:32:36 【问题描述】:

我正在从 Excel 工作表中读取数据,并且我想读取某些列:第 0 列,因为它是行索引,第 22:37 列。现在这就是我要做的:

import pandas as pd
import numpy as np
file_loc = "path.xlsx"
df = pd.read_excel(file_loc, index_col=None, na_values=['NA'], parse_cols = 37)
df= pd.concat([df[df.columns[0]], df[df.columns[22:]]], axis=1)

但我希望有更好的方法来做到这一点!我知道如果我这样做 parse_cols=[0, 22,..,37] 我可以做到,但是对于大型数据集这没有意义。

我也这样做了:

s = pd.Series(0)
s[1]=22
for i in range(2,14):
    s[i]=s[i-1]+1
df = pd.read_excel(file_loc, index_col=None, na_values=['NA'], parse_cols = s)

但它读取的前 15 列是 s 的长度。

【问题讨论】:

您必须生成一个列列表并将其传递给parse_cols,例如parse_cols=[0, 22,23,24.....,37] 而不是你现在在做什么 不知道为什么这不起作用,这可能是一个错误,当你传递一个硬编码列表时会发生什么:df = pd.read_excel(file_loc, index_col=None, na_values=['NA'], parse_cols = [0,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37)? @EdChum,如果通过硬编码列表,它可以工作。 在这种情况下生成一个列表而不是一个系列 【参考方案1】:

您可以像这样使用列索引(字母):

import pandas as pd
import numpy as np
file_loc = "path.xlsx"
df = pd.read_excel(file_loc, index_col=None, na_values=['NA'], usecols="A,C:AA")
print(df)

Corresponding documentation:

usecols : int、str、list-like 或 callable default None

如果没有,则解析所有列。

如果 str,则表示 Excel 列字母和列范围的逗号分隔列表(例如“A:E”或“A,C,E:F”)。范围包括两边。

如果是int列表,则表示要解析的列号列表。

如果是字符串列表,则表示要解析的列名列表。

0.24.0 版中的新功能。

如果可调用,则根据它评估每个列名,如果可调用返回 True,则解析该列。

根据上述行为返回列的子集。

0.24.0 版中的新功能。

【讨论】:

需要注意的是,“名称”应该读作“excel中的名称”,而不是您可以选择或用作标题的那些。文档对此并不清楚,但值得一提的是,这让我有些头疼。【参考方案2】:

“usecols”应该有所帮助,使用列范围(根据excel工作表,A,B ...等) 下面是例子

1.选定的列

df = pd.read_excel(file_location,sheet_name='Sheet1', usecols="A,C,F")

2。列范围和选定列

df = pd.read_excel(file_location,sheet_name='Sheet1', usecols="A:F,H")

3.多个范围

df = pd.read_excel(file_location,sheet_name='Sheet1', usecols="A:F,H,J:N")

4.列范围

df = pd.read_excel(file_location,sheet_name='Sheet1', usecols="A:N")

【讨论】:

按数字限制列的任何想法? @rluts,将usecols="A,C,F"替换为usecols=[0,2,5],列号范围内,usecols=range(2,9),根据需要请替换数字。【参考方案3】:

parse_cols 已弃用,请改用usecols

即:

df = pd.read_excel(file_loc, index_col=None, na_values=['NA'], usecols = "A,C:AA")

【讨论】:

还要注意我今天遇到的这个错误/意外行为。 github.com/pandas-dev/pandas/issues/18273 看起来使用列 names 不适用于 Excel...

以上是关于如何使用 Pandas 从 Excel 中读取某些列 - Python的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 从 excel 中读取下拉值

pandas 选择列或者添加列生成新的DataFrame

使用 pandas 从 Excel 文件中读取最后一列

熊猫。如何从 ZIP 存档中读取 Excel 文件

无法使用 read_excel 从 pandas 中的 xlsx 文件中读取日期列?

使用 pandas 从 Excel 中读取矩阵会根据所使用的 PC 提供 2 种不同的输出