读取 OpenOffice xlsx 文件中的数据,然后使用 python 转换为列表

Posted

技术标签:

【中文标题】读取 OpenOffice xlsx 文件中的数据,然后使用 python 转换为列表【英文标题】:Read data in OpenOffice xlsx file then convert to a list using python 【发布时间】:2021-10-15 07:20:21 【问题描述】:

美好的一天。我正在使用 pandas 读取 xlsx 文件中的一列数据。我只有 1 列,里面塞满了不同年龄的人。这是我的代码:

import math
import pandas as pd
import openpyxl

df = pd.read_excel('/run/media/soumi/Luna (HDD)/CF-0001/PSHS/Statistics/Module 1/SLG 3.0 Data set 3.1 DOH COVID Data Drop Case Information.xlsx') # can also index sheet by name or fetch all sheets
num = df['B2:B57001;'].tolist()

num.sort() 
print(f'\nnum')

fdt = pd.Series(num).value_counts().sort_index().reset_index().reset_index(drop=True)
fdt.columns = ['Element', 'Frequency']
print (fdt)

我希望它会为我创建一个频率表,但是,当我运行它时,它会向我显示:

 python -u "/run/media/soumi/Luna (HDD)/CF-0001/Programming/Python/Stat.py"
Traceback (most recent call last):
  File "/home/soumi/.local/lib/python3.9/site-packages/pandas/core/indexes/base.py", line 3361, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'B2:B57001;'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/run/media/soumi/Luna (HDD)/CF-0001/Programming/Python/Stat.py", line 6, in <module>
    num = df['B2:B57001;'].tolist()
  File "/home/soumi/.local/lib/python3.9/site-packages/pandas/core/frame.py", line 3458, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/soumi/.local/lib/python3.9/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'B2:B57001;'

我应该怎么做才能解决这个问题?提前致谢

编辑 1:我还要补充一点,我只使用 Manjaro,我不使用 Windows,所以我没有 excel 应用程序...如果有帮助

【问题讨论】:

df['B2:B57001;'] 基本上会寻找名为B2:B57001;的列 【参考方案1】:

您的代码尝试查找名为 B2:B57001; 的列。你应该怎么做,IUUC:

num = df.iloc[:, 0].tolist()

如果你想从列Age构造频率表,那么你可以这样做:

frequency = pd.value_counts(df.Age).to_frame().reset_index()

如果您只需要频率列表,请执行以下操作:

freq_list = pd.value_counts(df.Age).to_frame().reset_index()['Age'].tolist()

【讨论】:

我这样做了,它的输出是:```'C987903','C987912','C987916','C987919','C987926','C987978','C987985',' C988001', 'C997320', 'C997331', 'C997341', 'C997346', 'C997366', 'C997380', 'C997383', 'C997400', 单元频率 0 C100018 1 1 C100018 1 1 C1000541 1 C1 2 C010 C100115 1 ... ... ... 56995 C999926 1 56996 C999940 1 56997 C999965 1 56998 C999978 1 56999 C999994 1 [57000 行 x 2 列] ``` 其实它还在继续,但是***说字符太长了 @H2WO,你能发布我们 xlsx 的前几行吗?预期的输出是什么? imgur.com/SBM0vNj(这是 xlsx 内部的内容)。我只想使用“年龄”列而忽略其余部分。这是预期输出的示例:imgur.com/FizZiwG 对不起,我误解了你的问题。我试图告诉你你是如何得到关键错误KeyError: 'B2:B57001;'

以上是关于读取 OpenOffice xlsx 文件中的数据,然后使用 python 转换为列表的主要内容,如果未能解决你的问题,请参考以下文章

使用 ActiveXObject (JavaScript) 读取 Excel 或 OpenOffice (.ods) 文件

js解析excel表格

OpenOffice 将空单元格保存在 xlsx 中

nodejs-xlsx导出的excel,office打开提示“发现不可读取的内容”?

LibreOffice/OpenOffice 能否以编程方式向现有的 .docx/.xlsx/.pptx 文件添加密码?

从python中的xls或xlsx文件读取后将数据转换为字符串