我想编写func并将其添加到类中.我用
import pandas as pd
import tldextract
domain = []
df = pd.DataFrame()
df['urls'] = ['ru.vk.com', 'eng.facebook.com', 'ru.ya.ru']
urls = df.urls.values.tolist()
class csv:
def get_domain(self, list_url, list, df):
self.list_url = list_url
self.list = list
self.df = df
for i, url in enumerate(list_url):
get_domain = tldextract.extract(url)
subdomain = get_domain[0] + '.' + get_domain[1] + '.' + get_domain[2]
if subdomain.startswith('.'):
subdomain = subdomain[1:]
elif subdomain.endswith('.'):
subdomain = subdomain[:-1]
elif subdomain.startswith('www.'):
subdomain = subdomain[4:]
list.append(subdomain)
df['subdomain'] = list
df = csv()
df.get_domain(urls, domain, df)
Run Code Online (Sandbox Code Playgroud)
我试图从网址获取域名,但我得到错误
AttributeError: csv instance has no attribute '__setitem__'
Run Code Online (Sandbox Code Playgroud)
我应该改变什么?
您命名用于创建csv实例的变量df,与数据框项目相同,通过df引用csv对象而不是panda数据帧.然后,当您尝试调用时get domain,df引用该类,无法获取字符串索引,从而失败.
简而言之 - 更改最后2行中的变量名称,例如
csv_df = csv()
csv_df.get_domain(urls, domain, df)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这不是一个错误,但我很确定最后一行get_domain应该是
self.df['subdomain'] = self.list
Run Code Online (Sandbox Code Playgroud)
(对于函数中的所有变量也是如此,因为您希望更改类属性而不是给定变量).
并且您不应该命名变量list或任何其他保留关键字.可能会导致问题.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |