WIT*_*WIT 1 python oop class dataframe pandas
我正在处理跟踪本地比赛中网球运动员的数据.数据以json文件的形式提供给我,每100毫秒(每秒10次),它知道球场两侧球员的位置以及球的位置,并提供其他比赛数据.使用这个跟踪数据,我创建了一堆自定义python类和子类来创建一个"匹配"对象,我将所有跟踪数据加载到这个"匹配对象"中.我可以创建一个pandas df,保存自定义类的实例/这有意义吗?
背景故事/思考过程(如果我的问题没有意义,那很可能......)
我第一次实现这个,我基本上创建了一个"匹配"对象,我使用python OOP并将比赛分解为游戏,集合,点数,玩家等.玩家部分有点混乱,因为我的计算结果我们每100毫秒创建一个玩家对象和一个玩家的新实例(由于一个玩家在整个游戏中是相同的,但在那个确切的时刻将其视为该玩家,因此很难将其包裹起来).我不确定将这些"播放器"对象更改为大熊猫数据框中的行是否更有意义(它们是大量的,考虑3小时的匹配)或者如果我可以创建一只大熊猫df并让玩家成为一个专栏.玩家组成点,然后点组成帧,所以如果我确实将玩家对象更改为pandas df那将是困难的因为我会在数据帧中有一堆行构成一个点,然后是一堆点制作游戏..以及诸如此类的东西
因为有太多的跟踪数据,效率考虑因素对我来说很重要(虽然我更喜欢做一些有些慢但不是很大的事情,但它有助于我确保/检查所有数据)
DataFrame的列(Series)可以包含任何NumPy dtypes,包括object可以容纳任意Python对象的dumpe .
这样做首先放弃了使用NumPy/Pandas的大部分速度和空间优势.还有类型检查 - 如果你不小心插入了一个不是match子类实例的对象,它就会起作用.和许多便利功能.
但是你仍然可以获得一些方便的功能,有时这是使用熊猫的充分理由.
但是,如果表现不可接受,你将不得不重新思考.例如,如果将对象展平为一组属性(可能某些属性为某些子类的NaN或N/A),您可以将它们存储为一行,特别是如果其中一些属性是浮点数或整数你想要做大量的计算,你会从熊猫中获得更多 - 但当然要以失去你的课程的OO好处为代价.
有时,为了充分利用这两个世界,有必要构建一个混合体:一个DataFrame,其行包含match对象的存储,但后来也是一个match包含索引的类层次结构,甚至是一个单行DataFrame(一个主要的一个切片) )并提供相同信息的OO视图.但更常见的是,这样做是不值得的,因为要么几乎所有的代码最终都成为Pandas,或者几乎所有代码最终都是OO.
如果存在大量这些东西,最后一种可能性是使用关系数据库或旧式分层数据库的ORM,1用于存储和索引.
1.事实上,从一堆DataFrames中构建一个分层数据库,然后将它包装在一个对象模型中与前一段基本相同,但这里的想法是你使用已经构建的东西来做所有的努力和/或繁琐的东西,而不是你建立一个数据库只是为了隐藏自己.