【问题标题】:how to read certain columns from Excel using Pandas - Python如何使用 Pandas 从 Excel 中读取某些列 - 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,如果通过硬编码列表,它可以工作。
  • 在这种情况下生成一个列表而不是一个系列

标签: python numpy pandas dataframe


【解决方案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")

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2020-12-12
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多