Python 3.x 使用类从dataframe中删除列

Python 3.x 使用类从dataframe中删除列,python-3.x,pandas,dataframe,oop,Python 3.x,Pandas,Dataframe,Oop,我正在努力减少数据帧中不需要的数据列,但要让它在OOP的范围内工作。数据框中的列从“A”到“M” 例如: import pandas as pd # columns 'A' 'B' and 'C' are what I want kept vibe_df = pd.read_csv('C:Location/Document.csv') vibe_df = vibe_df[['DateTime', 'A', 'B', 'C']] 上面的工作,但是,我想使用OOP import pandas a

我正在努力减少数据帧中不需要的数据列,但要让它在OOP的范围内工作。数据框中的列从“A”到“M”

例如:

import pandas as pd

# columns 'A' 'B' and 'C' are what I want kept
vibe_df = pd.read_csv('C:Location/Document.csv')
vibe_df = vibe_df[['DateTime', 'A', 'B', 'C']]
上面的工作,但是,我想使用OOP

import pandas as pd

class MemoryVibes:
    def __init__(self,dataframe):
        self.dataframe = dataframe
     
    def keep_only_column(dataframe):
        dataframe = dataframe[['DateTime', 'A', 'B', 'C']]

MemoryVibes.keep_only_column(vibe_df)

vibe_df

没有抛出错误,但所有列仍然存在。请告知,因为我在编码方面的经验仍处于初级阶段。

这里的问题是,您永远不会改变
vibe_df
的值。当您将值传递到
keep_only_column
中时,您仅访问数据框并存储特定行。按照这里的代码,最接近当前架构的解决方案是只返回访问列:

def keep_only_列(数据帧):
返回数据帧[['DateTime','A','B','C']]
这就是说,如果您有一个严格由没有共享状态的静态类组成的类,那么最好将这些方法提取到中并导入所需的方法

“正确的”
OOP
解决方案是创建
MemoryVibes
类的实例,修改
keep_only_列
以改变实例状态,并在那里访问改变后的值

class MemoryVibe:
def __; int ___;(自身,数据帧):
self.dataframe=dataframe
#self.dataframe=self.dataframe[['DateTime','A','B','C']]
def keep_only_列():
self.dataframe=self.dataframe[['DateTime','A','B','C']]
mvibe=记忆IBE(振动频率)
mvibe.keep_only_列()
打印(mvibe.dataframe)
tp最好直接实例化
self.dataframe
的值,以便只包含
self.dataframe=dataframe[['DateTime','A','B','C']]所需的列
中的
\uuuu init\uuuu
并删除
仅保留列
,这样您就可以确保在实例化后始终拥有正确的数据帧,而无需调用其他函数

class MemoryVibe:
def __; int ___;(自身,数据帧):
self.dataframe=self.dataframe[['DateTime','A','B','C']]

这里的问题是,您永远不会改变
vibe_df
的值。当您将值传递到
keep_only_column
中时,您仅访问数据框并存储特定行。按照这里的代码,最接近当前架构的解决方案是只返回访问列:

def keep_only_列(数据帧):
返回数据帧[['DateTime','A','B','C']]
这就是说,如果您有一个严格由没有共享状态的静态类组成的类,那么最好将这些方法提取到中并导入所需的方法

“正确的”
OOP
解决方案是创建
MemoryVibes
类的实例,修改
keep_only_列
以改变实例状态,并在那里访问改变后的值

class MemoryVibe:
def __; int ___;(自身,数据帧):
self.dataframe=dataframe
#self.dataframe=self.dataframe[['DateTime','A','B','C']]
def keep_only_列():
self.dataframe=self.dataframe[['DateTime','A','B','C']]
mvibe=记忆IBE(振动频率)
mvibe.keep_only_列()
打印(mvibe.dataframe)
tp最好直接实例化
self.dataframe
的值,以便只包含
self.dataframe=dataframe[['DateTime','A','B','C']]所需的列
中的
\uuuu init\uuuu
并删除
仅保留列
,这样您就可以确保在实例化后始终拥有正确的数据帧,而无需调用其他函数

class MemoryVibe:
def __; int ___;(自身,数据帧):
self.dataframe=self.dataframe[['DateTime','A','B','C']]

您需要从
self.dataframe
中删除列,然后将返回的
dataframe
分配给
self.dataframe
,即
self.dataframe=self.dataframe['DateTime','A','B','C']
。从文章中不清楚您是打算修改最初传入的数据帧还是必须传入函数的数据帧。您需要从
self.dataframe
中删除列,然后将返回的
dataframe
分配给
self.dataframe
,即
self.dataframe=self.dataframe[['DateTime','A','B','C']]
。从文章中可以看出,您不清楚是要修改最初传入的数据帧还是要在函数中传入的数据帧。