程序运行出错,报错内容: Traceback (most recent call last): File "D:\PyCharm 2022.3.3\pythonProject\引证文献标准化处理.py", line 60, in <module> process_xlsx_file(aaaaa) File "D:\PyCharm 2022.3.3\pythonProject\引证文献标准化处理.py", line 43, in process_xlsx_file processed_rows = list(executor.map(process_row, df.to_dict('records'))) File "C:\Users\Chris.Rong\AppData\Local\Programs\Python\Python39\lib\concurrent\futures\_base.py", line 609, in result_iterator yield fs.pop().result() File "C:\Users\Chris.Rong\AppData\Local\Programs\Python\Python39\lib\concurrent\futures\_base.py", line 439, in result return self.__get_result() File "C:\Users\Chris.Rong\AppData\Local\Programs\Python\Python39\lib\concurrent\futures\_base.py", line 391, in __get_result raise self._exception File "C:\Users\Chris.Rong\AppData\Local\Programs\Python\Python39\lib\concurrent\futures\thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) File "D:\PyCharm 2022.3.3\pythonProject\引证文献标准化处理.py", line 20, in process_row cell_value = row['U'] KeyError: 'U'
时间: 2023-08-09 20:05:48 浏览: 456
非常抱歉,我之前的回答中的代码存在错误。由于使用`to_dict('records')`方法会将DataFrame转换为字典的列表,所以在`process_row`函数中无法直接通过列名来访问单元格值。
为了解决这个问题,你可以通过索引来访问单元格的值。下面是更新后的代码:
```python
import pandas as pd
import os
from concurrent.futures import ThreadPoolExecutor
def process_xlsx_file(aaaaa):
# 使用pandas读取xlsx文件
df = pd.read_excel(aaaaa, sheet_name="拆分结果")
print('检查点1')
# 删除名为"文献导出—Excel格式"的表格
if "文献导出—Excel格式" in df:
df.drop("文献导出—Excel格式", axis=1, inplace=True)
print('检查点2')
# 处理U列的数据
def process_row(row):
cell_value = row[20] # U列的索引为20
# 如果U列单元格中不包含字符"[J]",则返回空行
if cell_value is None or "[J]" not in cell_value:
return pd.Series([None] * len(df.columns))
print('检查点4')
# 删除U列单元格中的空格
row[20] = cell_value.replace(" ", "")
print('检查点5')
# 分割U列单元格,并将分割结果保存在U列后面的列中,分隔符为"."
split_values = cell_value.split(".")
row = row.append(pd.Series(split_values))
print('检查点6')
return row
# 使用多线程并行处理行数据
with ThreadPoolExecutor() as executor:
processed_rows = list(executor.map(process_row, df.values))
print('检查点7')
# 生成处理后的DataFrame
processed_df = pd.DataFrame(processed_rows, columns=df.columns)
# 保存处理后的xlsx文件
file_name = os.path.basename(aaaaa) # 获取原文件名
new_file_name = file_name.split(".xlsx")[0] + "引证文献标准化.xlsx" # 新文件名
processed_df.to_excel(new_file_name, index=False)
print('检查点8')
aaaaa = r'D:\【科研】\【全学科引文数据集】\【3.拆分引证文献】\AAAtest.xlsx'
process_xlsx_file(aaaaa)
```
这次代码已经修复了访问U列单元格值的问题。请注意,这段代码在处理大型xlsx文件时可能仍然会消耗较长的时间。如果问题仍然存在,请提供更多关于文件大小和性能需求的信息,以便我能够更好地帮助你。非常抱歉给你带来的困扰。
阅读全文