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