Привет, поэтому я создал собственный аксессор для своего информационного кадра, чтобы облегчить форматирование вывода при выводе html или excel.
import pandas as pd
@pd.api.register_dataframe_accessor("css_formatting")
class DataFrameFormatsAccessor(object):
def __init__(self, pandas_obj):
self._obj = pandas_obj
idx = self._obj.index
col = self._obj.columns
self.background_color = pd.DataFrame("white", index=idx,columns=col)
@property
def background_color(self):
return self._background_color
Затем я пытаюсь что-то вроде этого
import pandas as pd
df = pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})
>>> df
A B
0 1 4
1 2 5
2 3 6
>>> df.css_formatting.background_color
A B
0 white white
1 white white
2 white white
>>> df.css_formattig.background_color.iloc[0,0] = 'red'
>>>df.css_formatting.background_color
A B
0 red white
1 white white
2 white white
>>> df2 = df.copy()
>>> df2.css_formatting
A B
0 white white
1 white white
2 white white
Теперь я думаю, что понимаю, почему это происходит. Каждый раз, когда создается новый фрейм данных и инициализируется метод доступа css_formatting
, он создает background_colors
фрейм данных равного размера со значением white
.
Мой вопрос: как мне настроить его так, чтобы df.copy()
также копировал аксессор css_formatting
. Или я должен попробовать что-то другое?
edit: Чтобы добавить больше,
Я пытаюсь добавить
@staticmethod
def copy_formatting(self,other):
self.background_color = other.css_formatting.background_color
return
И затем попробуйте следующее, после того, как я сделал в оригинальном OP
df2.css_formatting.copy_formatting(df2,df)
и я получаю предупреждение, что Pandas doesn't allow columns to be created via a new attribute name
. Это также не делает то, что я хочу.
2nd Edit:
Я сделал болван об этом статическом методе
@staticmethod
def copy_formatting(self,other):
self.css_formatting.background_color = other.css_formatting.background_color
return
С учетом сказанного, я с радостью приму альтернативы, которые кто-нибудь предложит.