我想编写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)
我尝试从网址获取域名,但我收到错误
AttributeError: csv instance has no attribute '__setitem__'
我应该改变什么?
答案 0 :(得分:5)
您命名了用于创建ID (Index) speed _avg_val speed_y _avg_val_y
1 10 30.5 2 25.1
实例csv
的变量,与数据框项目相同,因为df
引用df
对象而不是熊猫数据框。然后,当您尝试调用csv
时,get domain
引用该类,无法获取字符串索引,从而失败。
简而言之 - 更改最后两行中的变量名称,例如
df
顺便说一句,这不是一个错误,但我很确定csv_df = csv()
csv_df.get_domain(urls, domain, df)
上的最后一行应该是
get_domain
(对于函数中的所有变量都是如此,因为您希望更改类属性而不是给定变量)。
并且您不应该为变量self.df['subdomain'] = self.list
或任何其他保留关键字命名。可能会导致问题。
答案 1 :(得分:0)
我不知道你还应该改变什么,但你肯定不应该在get_domain方法中使用get_domain变量。从这开始,然后看看它是否能解决任何问题。
(get_domain函数位于类的第二行,get_domain变量位于类的第6行)
编辑:还有一件事,方法中的代码与...中的值没有任何关系,我们称之为测试数据。这可能是错的,也可能是对的,但你不知道。