如何使用 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的主要内容,如果未能解决你的问题,请参考以下文章