首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lambda通过列表中的元素循环函数

Lambda通过列表中的元素循环函数
EN

Stack Overflow用户
提问于 2022-05-25 19:44:06
回答 1查看 60关注 0票数 0

如何调整这段代码,使函数循环通过列表models_2?如果函数使用models,它会工作,如果我更改为`models_2‘,它会给出以下错误:

AttributeError:“浮动”对象没有属性“查找”

这是我的数据,从excel的所有单元格格式设置为“文本”。

代码语言:javascript
复制
        MOD1       MOD2       MOD3       MOD4
0  File1.pdf  File3.pdf  File1.pdf  File3.pdf
1  File2.pdf        NaN  File2.pdf  File3.pdf
2  File3.pdf        NaN        NaN        NaN
代码语言:javascript
复制
models = ['MOD1']
models_2 = ['MOD1', 'MOD2']

def merge_pdf(models):
    merger = PdfFileMerger()
        for name in models:
            for index, row in df.iterrows():
                merger.append(row[name])
    merger.write(f"Order #XXXXXXX ({name}) Production Package - Rev.0.pdf")
    merger.close()

merge_pdf(models)

完整的错误消息:

代码语言:javascript
复制
PdfReadWarning: Xref table not zero-indexed. ID numbers for objects will be corrected. [_reader.py:1065]
Traceback (most recent call last):
  File "Z:\PyCharm\Excel_Reader\Excel_Reader.py", line 30, in <module>
    merge_pdf(models)
  File "Z:\PyCharm\Excel_Reader\Excel_Reader.py", line 27, in merge_pdf
    merger.append(row[name])
  File "C:\Users\x\AppData\Local\Programs\Python\Python39\lib\site-packages\PyPDF2\merger.py", line 227, in append
    self.merge(len(self.pages), fileobj, bookmark, pages, import_bookmarks)
  File "C:\Users\x\AppData\Local\Programs\Python\Python39\lib\site-packages\PyPDF2\merger.py", line 149, in merge
    pdfr = PdfFileReader(
  File "C:\Users\x\AppData\Local\Programs\Python\Python39\lib\site-packages\PyPDF2\_reader.py", line 239, in __init__
    self.read(stream)
  File "C:\Users\x\AppData\Local\Programs\Python\Python39\lib\site-packages\PyPDF2\_reader.py", line 911, in read
    stream.seek(-1, 2)
AttributeError: 'float' object has no attribute 'seek'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-25 20:20:22

您的代码失败了,因为列'MOD2‘包含类型为floatNaN值。处理这个问题的方式取决于您想要对这些NaN值做什么。

您可以通过运行以下代码来验证这一点:

代码语言:javascript
复制
import pandas as pd
import numpy as np

data = {
    'MOD1':['File1.pdf', 'File2.pdf', 'File3.pdf'],
    'MOD2':['File1.pdf', np.nan, np.nan],
    'MOD3':['File1.pdf', 'File2.pdf', np.nan],
    'MOD4':['File1.pdf', 'File2.pdf', np.nan]
}

df = pd.DataFrame(data)

models = ['MOD1']
models_2 = ['MOD1', 'MOD2']

merger = []

for name in models_2:
    for index, row in df.iterrows():
        print(name, index, row[name], type(row[name]))

这将打印以下内容:

代码语言:javascript
复制
MOD1 0 File1.pdf <class 'str'>
MOD1 1 File2.pdf <class 'str'>
MOD1 2 File3.pdf <class 'str'>
MOD2 0 File1.pdf <class 'str'>
MOD2 1 nan <class 'float'>
MOD2 2 nan <class 'float'>

如果知道只想包含字符串值的单元格,可以在将其附加到merger对象之前添加类型检查,如下所示:

代码语言:javascript
复制
models = ['MOD1']
models_2 = ['MOD1', 'MOD2']

def merge_pdf(models):
    merger = PdfFileMerger()
        for name in models:
            for index, row in df.iterrows():
                if type(row[name]) == str:
                    merger.append(row[name])
    merger.write(f"Order #XXXXXXX ({name}) Production Package - Rev.0.pdf")
    merger.close()

merge_pdf(models)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72383355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档