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

时间:2018-02-15 20:42:43

标签: python string pandas

我有以下代码。它是更大代码的一部分,我只是提供一个代码片段来显示问题。当我在代码下面运行时,我得到错误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)))

2 个答案:

答案 0 :(得分: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
>>> 

答案 1 :(得分: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)

但它的速度慢而且效率低