英文:
How to combine pandas, dataclasses to import data
问题
我正在尝试使用dataclasses学习类
@dataclass
class Collect:
url : str
def collect(url):
df = pd.read_csv(url)
return df
df = Collect("national_news_scrape.csv")
df.head()
但是我遇到了错误:
AttributeError: 'Collect'对象没有'head'属性
不太清楚为什么。
英文:
I'm trying to learn classes with dataclasses
@dataclass
class Collect:
url : str
def collect(url):
df = pd.read_csv(url)
return df
df = Collect("national_news_scrape.csv")
df.head()
But I get error:
AttributeError: 'Collect' object has no attribute 'head'
Not sure why.
答案1
得分: 1
以下是示例:
@dataclass
class Collect:
url: str
def collect(self):
df = pd.read_csv(self.url)
return df
# 创建一个 Collect 类的实例
instance = Collect("national_news_scrape.csv")
print(instance.url) # national_news_scrape.csv
# 调用 Collect 类的方法
df = instance.collect()
print(df.head())
英文:
Here is an example:
@dataclass
class Collect:
url: str
def collect(self):
df = pd.read_csv(self.url)
return df
# create an instance of Collect class
instance = Collect("national_news_scrape.csv")
print(instance.url) # national_news_scrape.csv
# call the method of Collect class
df = instance.collect()
print(df.head())
答案2
得分: 1
问题的原因
你收到AttributeError
是因为你的代码构造了Collect
对象,并使用了Collect("national_news_scrape.csv")
,但是没有调用collect()
方法来返回一个pandas的DataFrame
。
head()
方法是在DataFrame
实例上定义的,而不是在你的Collect
类的实例上。
修复方法
然而,我感到有些混淆!我会假设你的代码是一个_最小(不-)工作示例_,这解释了为什么你在这里使用了@dataclass
,当它似乎不是必要的时候。
Danila发布了一些有效的代码,尽管我自己没有测试过 - 请查看这个答案以获取修正。
此外,请注意collect()
方法的签名变化 - 现在不再需要一个url
位置参数,因为它使用了由构造函数从@dataclasss
设置的self.url
实例属性。
英文:
The cause
You are getting the AttributeError
because your code constructs the Collect
object with Collect("national_news_scrape.csv")
, but does not then call the collect()
method to return a pandas DataFrame
.
The head()
method is defined on a DataFrame
instance and not an instance of your Collect
class.
The fix
I do however sense some confusion! I will assume that your code is a Minimal (non-)Working Example, which would explain why you are using @dataclass
here when it doesn't seem necessary.
Danila has posted some working code, though I haven't tested it myself - please consult this answer for a correction.
Additionally, please note the change in signature of the collect()
method - it now no longer requires a url
positional argument because it uses the self.url
instance attribute that is set by the constructor from @dataclasss
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论