【问题标题】:Class 'property' does not define '__getitem__', so the '[]' operator can't be used on its instances类“property”没有定义“__getitem__”,因此不能在其实例上使用“[]”运算符
【发布时间】:2020-04-30 06:55:11
【问题描述】:

我在名为“df”的 pandas 数据帧上使用 iloc 函数。这是我的代码:

import pandas as pd

class test:
    df = pd.DataFrame
    def __init__(self):
       self.df = pd.dataframe()

    def read_csv(self):
       self.df = pd.read_csv(filename.csv)

    def operation(self, num):
       output_details = self.df.iloc[num]
       return output_deatils

但是,我的 IDE 收到此警告:

类 'property' 没有定义 'getitem',因此不能在其实例上使用 '[]' 运算符

我不知道出了什么问题。我正在使用 iloc 获取 Pandas 数据框中“num”行的所有值。我认为 output_details 实际上不是带有逗号分隔值的列表,而是熊猫数据类型。我该怎么做(或将其转换为列表)?

【问题讨论】:

  • 您的示例代码无法产生这样的结果。特别是,df = pd.dataFrame 和 self.df = pd.dataframe() 都会产生 AttributeError: module 'pandas' has no attribute 'dataFrame'(dataframe 同上)。请确保示例代码能代表您的问题。
  • @Amadan 我打错字了,忘记了一些元素。请你再看一遍好吗?

标签: python pandas csv dataframe


【解决方案1】:

仍然不是minimal, complete, verifiable example (MCVE)。以后,请确保您可以执行您的示例,然后将其复制粘贴到问题中;它避免了这类问题。但如果我不得不猜测......

df = pd.DataFrame 不会将 DataFrame 的实例放入df,而是放入DataFrame 类。该类具有iloc 属性,这是instance 设法执行df.iloc[...] 的方式;但是类中的属性对象不能这样使用。

这是您的问题的 MCVE:

df = pd.DataFrame
df.iloc[0]

这是DataFrame的正确用法:

df = pd.DataFrame([[0]])
df.iloc[0]

显然,这也可以解决它:

self.df = pd.read_csv("filename.csv")
df.iloc[0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多