如何向熊猫添加数据.数据帧,无需重新创建实例



我正在尝试为pandas开发自定义数据帧访问器,但遇到了我不知道如何解决的问题。

我的访问器应该从自定义源加载数据,我计划将这些值分配给调用DataFrame哪个访问器。但是当我将新创建的数据帧分配给数据帧实例时,我没有任何反应。

我认为这是因为我正在创建数据帧的新实例而不是重用旧实例。

是否有任何优雅的方法可以保留数据帧实例并在那里加载信息?

这是我的代码,我现在是如何接近它的:

import pandas
import numpy

@pandas.api.extensions.register_dataframe_accessor("test")
class TestAccessor:
def __init__(self, obj: pandas.DataFrame) -> None:
self.data = obj
def read(self) -> None:
# Creates dataframe with three columns `X, Y, Z`
self.data = pandas.DataFrame(numpy.random.randint(0,100,size=(100, 3)), columns=list('XYZ'))

# Creates dataframe with three columns `A, B, C`
data = pandas.DataFrame(numpy.random.randint(0,100,size=(100, 3)), columns=list('ABC'))
# Suppose to load dataframe with columns `X, Y, Z`
data.test.read()
# Will show dataframe with columns `A, B, C`
print (data)

有没有办法解决这个问题?解决这个问题的最佳方法是什么?

请注意,这在实践中是否真的有意义,但这里有一个解决方案来实现您在示例中想要的内容:就地删除所有现有列并分配新列:

import pandas
import numpy
@pandas.api.extensions.register_dataframe_accessor("test")
class TestAccessor:
def __init__(self, obj: pandas.DataFrame) -> None:
self.data = obj
def read(self) -> None:
# Creates dataframe with three columns `X, Y, Z`
self.data.drop(columns=self.data.columns, inplace=True)
new = pandas.DataFrame(numpy.random.randint(0,100,size=(100, 3)), columns=list('XYZ'))
self.data[new.columns] = new
# Creates dataframe with three columns `A, B, C`
data = pandas.DataFrame(numpy.random.randint(0,100,size=(100, 3)), columns=list('ABC'))
# Suppose to load dataframe with columns `X, Y, Z`
data.test.read()
# Now shows dataframe with columns `X, Y, Z`
print (data)

输出:

X   Y   Z
0   30  86  16
1   33  93  33
2   43  62  95
3   24  74   5
4   52  68  95
..  ..  ..  ..
95  89  54  90
96  35  78  20
97  68  11  17
98  29  68  44
99  33  73  11
[100 rows x 3 columns]

最新更新