读取 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) 文件
nodejs-xlsx导出的excel,office打开提示“发现不可读取的内容”?
LibreOffice/OpenOffice 能否以编程方式向现有的 .docx/.xlsx/.pptx 文件添加密码?