Python:编写类时出错

时间:2016-11-10 14:07:21

标签: python class

我想编写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__'

我应该改变什么?

2 个答案:

答案 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行)

编辑:还有一件事,方法中的代码与...中的值没有任何关系,我们称之为测试数据。这可能是错的,也可能是对的,但你不知道。