使用 pandas 从 Excel 文件中读取最后一列
Posted
技术标签:
【中文标题】使用 pandas 从 Excel 文件中读取最后一列【英文标题】:Read the last column from an Excel file with pandas 【发布时间】:2019-07-15 00:47:55 【问题描述】:类似于how to read certain columns from Excel using Pandas - Python,但稍微复杂一些。
假设我有一个名为“foo.xlsx”的 Excel 文件,它会随着时间的推移而增长 - 每个月都会在右侧附加一个新列。但是,当我阅读它时,我只需要前两列和最后一列。我希望usecols
参数可以解决这个问题,所以我去了df = pd.read_excel("foo.xlsx", usecols=[0, 1, -1])
,但它只给了我前两列。
我的解决方法是:
df = pd.read_excel("foo.xlsx")
df = df[df.columns[[0, 1, -1]]]
但它每次都需要读取整个文件。有什么方法可以在读取文件时获得我想要的数据框?谢谢。
【问题讨论】:
@Nihal 你能详细说明你的观点吗?pandas
确实支持读取具有指定列的文件,但我问的是如何始终获取最后一个。
我想指定usecols
参数不会节省很多时间,因为read_excel
总是读取整张纸。 usecols
只是在阅读完所有内容后跳过其余部分,只会加速解析。
【参考方案1】:
如果您真的想这样做(请参阅我上面的评论),您可以这样做:
xl = pd.ExcelFile(file)
ncols = xl.book.sheets()[0].ncols
df = xl.parse(0, usecols=[0, 1, ncols-1])
此解决方案不会读取 excel 文件两次。
【讨论】:
只是出于好奇,xl.book.sheets()[0].ncols
不需要阅读整个 Excel 文件才能得到答案吗?我检查了ExcelFile Vs. read_excel in pandas,我想知道这个解决方案如何更好。
是的,它必须读取整个文件。但是下面的 parse 命令不必再次 id。所以总体上没有赢得多少,但没有做两次(与jezreal的回答相反)【参考方案2】:
一个想法是获取column count 并传递给usecols
:
from openpyxl import load_workbook
path = "file.xlsx"
wb = load_workbook(path)
sheet = wb.worksheets[0]
column_count = sheet.max_column
print (column_count)
或者只读取文件的第一行:
column_count = len(pd.read_excel(path, nrows=0).columns)
df = pd.read_excel(path, usecols=[0, 1, column_count-1])
print (df)
【讨论】:
这是次优的,因为 excel 文件将被读取两次,这对于大文件来说非常耗时。【参考方案3】:您可以使用 df.head() 和 df.tail() 读取前 2 行和最后一行。例如:
df = pd.read_excel("foo.xlsx", sheet_name='ABC')
#print the first 2 column
print(df.head(2))
#print the last column
print(df.tail(1))
编辑:糟糕,上面的代码读取的是行而不是列。是的,您必须每次都阅读该文件。我认为没有读取部分文件的选项。
对于阅读专栏,也许你可以这样做
df['Column Name'][index]
【讨论】:
您的答案提供的是行,而不是列。此外,当文件随时间变大时,它不能阻止读取整个文件。以上是关于使用 pandas 从 Excel 文件中读取最后一列的主要内容,如果未能解决你的问题,请参考以下文章
使用 python/pandas 从特定文件夹中读取几个嵌套的 .json 文件到 excel 中