rea*_*ind 2 python class pandas
我正在尝试在 Python 类中创建一个名为“tilt”的方法,该方法使用 Pandas 将 DataFrame 颠倒过来。但每当我在此类创建的实例上使用此“倾斜”方法时,我都会收到此错误“该对象没有属性“iloc””。
import numpy as np
import pandas as pd
class Board():
def __init__(self):
pass
def arrange(self):
board=pd.DataFrame(np.arange(1,65).reshape(8,8),index=[1,2,3,4,5,6,7,8],columns=[1,2,3,4,5,6,7,8])
self = board.copy()
self.loc[1]=['BP1','BP2','BP3','BP4','BP5','BP6','BP7','BP8']
self.loc[2]=['blR','blK','blB','bQ','bK','brB','brK','brR']
self.loc[7]=['wlR','wlK','wlB','wK','wQ','wrB','wrK','wrR']
self.loc[8]=['WP1','WP2','WP3','WP4','WP5','WP6','WP7','WP8']
print(self)
def tilt(self):
self.iloc[::-1]
print(self)
Run Code Online (Sandbox Code Playgroud)
在 中.tilt(),您使用self.iloc[::-1]. 然而,在这个实例方法的范围内,self只是一个简单的、简约的Python类,而不是一个DataFrame。self它对您对内部的局部变量所做的操作一无所知.arrange()。
即使您b.arrange()首先调用,这也不会就地修改类实例;self它修改在 范围内调用的变量的本地副本.arrange()。那是:
>>> b = Board()
>>> b.arrange()
# ...
>>> isinstance(b, pd.DataFrame)
False
Run Code Online (Sandbox Code Playgroud)
查看Pandas 数据结构子类化指南。我建议使用组合,因为实际上 Pandas 对象的子类化很快就会变得很复杂。
以下是组合的示例:
class Board(object):
def __init__(self):
self.board = pd.DataFrame(np.arange(1, 65).reshape(8, 8),
index=np.arange(1, 9),
columns=np.arange(1, 9))
def arrange(self):
self.board.loc[1] = ['BP1','BP2','BP3','BP4','BP5','BP6','BP7','BP8']
self.board.loc[2] = ['blR','blK','blB','bQ','bK','brB','brK','brR']
self.board.loc[7] = ['wlR','wlK','wlB','wK','wQ','wrB','wrK','wrR']
self.board.loc[8] = ['WP1','WP2','WP3','WP4','WP5','WP6','WP7','WP8']
return self.board
def tilt(self):
return self.board.iloc[::-1]
Run Code Online (Sandbox Code Playgroud)
用法:
>>> b = Board()
>>> b.arrange()
1 2 3 4 5 6 7 8
1 BP1 BP2 BP3 BP4 BP5 BP6 BP7 BP8
2 blR blK blB bQ bK brB brK brR
3 17 18 19 20 21 22 23 24
4 25 26 27 28 29 30 31 32
5 33 34 35 36 37 38 39 40
6 41 42 43 44 45 46 47 48
7 wlR wlK wlB wK wQ wrB wrK wrR
8 WP1 WP2 WP3 WP4 WP5 WP6 WP7 WP8
>>> b.tilt()
1 2 3 4 5 6 7 8
8 WP1 WP2 WP3 WP4 WP5 WP6 WP7 WP8
7 wlR wlK wlB wK wQ wrB wrK wrR
6 41 42 43 44 45 46 47 48
5 33 34 35 36 37 38 39 40
4 25 26 27 28 29 30 31 32
3 17 18 19 20 21 22 23 24
2 blR blK blB bQ bK brB brK brR
1 BP1 BP2 BP3 BP4 BP5 BP6 BP7 BP8
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
750 次 |
| 最近记录: |