首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用类从dataframe中删除列

使用类从dataframe中删除列
EN

Stack Overflow用户
提问于 2020-08-27 22:56:03
回答 1查看 28关注 0票数 1

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

示例:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

发布于 2020-08-27 23:08:36

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

代码语言:javascript
复制
def keep_only_column(dataframe):
        return dataframe[['DateTime', 'A', 'B', 'C']]

也就是说,如果您有一个严格由没有共享状态的静态类组成的类,将这些方法提取到module中并导入所需的方法将是一个更好的想法。

一个“合适的”OOP解决方案是创建MemoryVibes类的一个实例,修改keep_only_column以改变实例状态,并访问改变后的值。

代码语言:javascript
复制
class MemoryVibe:
    def __int__(self, dataframe):
        self.dataframe = dataframe
        # self.dataframe = self.dataframe[['DateTime', 'A', 'B', 'C']]

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

mvibe = MemoryVibe(vibe_df)
mvibe.keep_only_column()

print(mvibe.dataframe)

最好直接将self.dataframe的值实例化为只包含__init__中的self.dataframe = dataframe[['DateTime', 'A', 'B', 'C']]所需的列,并删除keep_only_columns,这样您就可以确保始终拥有正确的数据帧,而无需在实例化后调用另一个函数。

代码语言:javascript
复制
class MemoryVibe:
    def __int__(self, dataframe):
        self.dataframe = self.dataframe[['DateTime', 'A', 'B', 'C']]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63618750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档