使用函数时从单元格获取绝对值时出现Python错误

问题描述 投票:0回答:2

我有以下代码。它是更大代码的一部分,我只是提供一个代码片段来显示问题。当我在代码下运行时,我得到错误AttributeError: 'str' object has no attribute 'values'df['URL'].values[0]运行良好。我想将URL字段中的文本值复制到名为pdf_text的新字段中,我希望一次只执行一个值。因此我正在使用一个功能。在我的实际代码中,我从URL列中获取值并打开这些文件并进行进一步处理。

sales = [{'account': 'credit cards', 'Jan': '150 jones', 'Feb': '200 .jones', 'URL': 'ea2018-001.pdf'},
         {'account': '1',  'Jan': 'Jones', 'Feb': '210', 'URL': ''},
         {'account': '1',  'Jan': '50',  'Feb': '90',  'URL': 'ea2017-104.pdf' }]
df = pd.DataFrame(sales)

def pdf2text(url):

    url=url.values[0]

    return url

#        
abc= (df.assign(pdf_text = df['URL'].apply(pdf2text)))
python string pandas
2个回答
0
投票

您只想要没有文件扩展名的PDF名称?

>>> import pandas as pd
>>> sales = [{'account': 'credit cards', 'Jan': '150 jones', 'Feb': '200 .jones', 'URL': 'ea2018-001.pdf'},
...          {'account': '1',  'Jan': 'Jones', 'Feb': '210', 'URL': ''},
...          {'account': '1',  'Jan': '50',  'Feb': '90',  'URL': 'ea2017-104.pdf' }]
>>> 
>>> df = pd.DataFrame(sales)
>>> df.head()

          Feb        Jan             URL       account
0  200 .jones  150 jones  ea2018-001.pdf  credit cards
1         210      Jones                             1
2          90         50  ea2017-104.pdf             1


>>> df['your_column'] = df.URL.map(lambda x: x.split(".")[0])
>>> df.head()


          Feb        Jan             URL       account your_column
0  200 .jones  150 jones  ea2018-001.pdf  credit cards  ea2018-001
1         210      Jones                             1            
2          90         50  ea2017-104.pdf             1  ea2017-104
>>> 

0
投票

它引发了ValueError,因为url是一个字符串(不是整个系列),你试图从字符串对象中获取values属性。

在你使用apply作为系列的情况下,每次迭代时你的函数pdf2text都将pdf文件名作为参数。

df['URL'] = df['URL'].apply(pdf2text)

相当于

urls = []
for url in df['URL']:
    # `url` equals something like this -> 'ea2018-001.pdf'
    urls.append(pdf2text(url))
df['URL'] = pd.Series(urls)

但它速度慢,效率低

© www.soinside.com 2019 - 2024. All rights reserved.