我正在努力减少数据帧中不需要的数据列,但让它在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没有抛出错误,但所有列仍然存在。请告知,因为我的编码经验仍处于初级阶段。
发布于 2020-08-27 23:08:36
这里的问题是你永远不会改变vibe_df的值。当您将值传递给keep_only_column时,您只是在访问数据框并存储特定行。按照这里的代码,最接近当前架构的解决方案是简单地返回访问列:
def keep_only_column(dataframe):
return dataframe[['DateTime', 'A', 'B', 'C']]也就是说,如果您有一个严格由没有共享状态的静态类组成的类,将这些方法提取到module中并导入所需的方法将是一个更好的想法。
一个“合适的”OOP解决方案是创建MemoryVibes类的一个实例,修改keep_only_column以改变实例状态,并访问改变后的值。
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,这样您就可以确保始终拥有正确的数据帧,而无需在实例化后调用另一个函数。
class MemoryVibe:
def __int__(self, dataframe):
self.dataframe = self.dataframe[['DateTime', 'A', 'B', 'C']]https://stackoverflow.com/questions/63618750
复制相似问题