无法使用 Pandas read_excel() 为 xlsx 文件下载完整行 [重复]

Posted

技术标签:

【中文标题】无法使用 Pandas read_excel() 为 xlsx 文件下载完整行 [重复]【英文标题】:Failed to download full rows using Pandas read_excel() for xlsx file [duplicate] 【发布时间】:2021-04-02 14:11:07 【问题描述】:

该文件应该有数千行。 但是在下面使用它只会返回数据框中的前几行

文件 https://www.hkex.com.hk/eng/services/trading/securities/securitieslists/ListOfSecurities.xlsx

失败的例子

import pandas as pd

url = 'https://www.hkex.com.hk/eng/services/trading/securities/securitieslists/ListOfSecurities.xlsx'
df = pd.read_excel(url, engine='openpyxl', header=2, usecols='A:D', verbose=True)
print(df.shape)
# output - only 5 rows
Reading sheet 0
(5, 4)

工作示例

同一个文件。先下载,在Excel中打开,修改文本并保存(没有改变格式并保留xlsx),然后使用read_excel()从文件中打开

url = 'https://www.hkex.com.hk/eng/services/trading/securities/securitieslists/ListOfSecurities.xlsx'
path = os.path.join(os.path.dirname(__file__), 'download')
wget.download(url, out=path)
file = os.path.join(path, 'ListOfSecurities.xlsx')

# open to edit and then save in Excel

df = pd.read_excel(file, engine='openpyxl', header=2, usecols='A:D', verbose=True)
print(df.shape)
# output
Reading sheet 0
(17490, 4)

【问题讨论】:

这个问题可能是由正在使用的数据引起的。您应该包含一些示例数据,以便帮助人员复制问题。 下载并注意到同样的问题。形状 (5, 4)。数据格式问题。 “Spread Table”和“Board Lot”列问题 但这仍然是有效的 excel 格式。所以在这里寻找解决方案 【参考方案1】:

更新:根据上下文更改代码,xlrd 不可行

import pandas as pd
import os 
import wget

url = 'https://www.hkex.com.hk/eng/services/trading/securities/securitieslists/ListOfSecurities.xlsx'
path = os.path.join(os.path.dirname(__file__), 'download')
wget.download(url, out=path)
filename = os.path.join(path, 'ListOfSecurities.xlsx')

from openpyxl import load_workbook

excel_file = load_workbook(filename)
sheet = excel_file["ListOfSecurities"]
sheet.delete_cols(5,21) # Use only Cols A:D

data = sheet.values
cols = next(data) # Skip row 0
cols = next(data) # Skip row 1
cols = next(data)[0:4] # Cols A:D


df = pd.DataFrame(data, columns=cols)

print(df.shape)

我将 excel 引擎更改为在 pandas 中使用默认引擎 (xlrd),以下代码有效。

import pandas as pd
import os 
import wget

url = 'https://www.hkex.com.hk/eng/services/trading/securities/securitieslists/ListOfSecurities.xlsx'
path = os.path.join(os.path.dirname(__file__), 'download')
wget.download(url, out=path)
filename = os.path.join(path, 'ListOfSecurities.xlsx')

df = pd.read_excel(filename, header=2, usecols='A:D', verbose=True)
print(df.shape)

输出中的一个不一致之处是它显示的行数减少了 4:

Reading sheet 0
(17486, 4)

【讨论】:

谢谢阿西姆。但是我使用的 xlrd 版本不支持 xlsx 文件。 xlrd.biffh.XLRDError:Excel xlsx 文件;不支持。 xlrd == 2.0.1 熊猫 == 1.1.5 ***.com/questions/65254535/… 您使用的是什么版本的 Pandas? 熊猫 == 1.1.5 @memento 将答案更改为使用openpyxl 本身打开文件,然后将其加载到pandas。让我知道这是否有效。 完美运行,谢谢

以上是关于无法使用 Pandas read_excel() 为 xlsx 文件下载完整行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Pandas read_excel() 为 xlsx 文件下载完整行 [重复]

Python:Pandas read_excel 无法打开 .xls 文件,不支持 xlrd

pandas.read_excel参数“sheet_name”无法正常工作,,将sheet_name改写成sheetname

pandas.read_excel,第一行值

编码参数是不是适用于 pandas.read_excel?

如何在 pandas 中使用 read_excel 提高处理速度?