我想替换pandas dataframe的3列 df 使用词典 chess_dict 将象棋方形坐标包含作为字符串作为字符串来映射它们以2x1整数列表的形式到笛卡尔坐标。
我尝试使用替换方法,但由于某种原因,它仅替换为列表的第一个整数,而不是两个
例如。('a1','h6'( ->([0,0],[7,5](
>>>chess_dict
{'a1': [0, 0],
'a2': [0, 1],
...
'h5': [7, 4],
'h6': [7, 5],
'h7': [7, 6],
'h8': [7, 7]}
>>>df
WK WR BK plays outcome
0 h4 e6 a4 b w
1 a6 h4 g8 w w
2 f5 a3 d1 w w
3 c2 h3 f5 w w
...
>>>df.ix[:,0].replace(chess_dict, inplace=True)
>>>df.ix[:,1].replace(chess_dict, inplace=True)
>>>df.ix[:,2].replace(chess_dict, inplace=True)
>>>df
WK WR BK plays outcome
0 7 4 0 b w
1 5 3 7 w w
2 5 0 3 w w
3 1 2 4 w w
...
我尝试用笛卡尔坐标替换为字符串,然后将字符串转换为整数列表并起作用,但是由于我是Python和Pandas的新手,所以我猜想有一种更简单的方法使用<<strong>替换,但是我缺少一些基本的东西,我似乎无法弄清楚。
我也尝试了以相同结果的语法:
df.ix[:,0].replace(to_replace = chess_dict.keys(), value = chess_dict.values(), inplace=True)
我还尝试使用笛卡尔坐标(0,0(,(0,1(等的整数元组,但是现在只插入了dataframe列中的最后一个值,而不是第一个值P>
WK WR BK plays outcome 0 3 g7 b4 b w 1 3 h7 d1 b w 2 3 h6 f5 w w 3 6 d5 b1 b w
选项1
chess_dict = {
r + c: [i, j]
for i, r in enumerate(list('abcdefgh'))
for j, c in enumerate(list('12345678'))
}
df.iloc[:, :3].stack().map(chess_dict).unstack().join(df.iloc[:, 3:])
WK WR BK plays outcome
0 [7, 3] [4, 5] [0, 3] b w
1 [0, 5] [7, 3] [6, 7] w w
2 [5, 4] [0, 2] [3, 0] w w
3 [2, 1] [7, 2] [5, 4] w w
选项2
df.applymap(lambda x: chess_dict.get(x, x))
WK WR BK plays outcome
0 [7, 3] [4, 5] [0, 3] b w
1 [0, 5] [7, 3] [6, 7] w w
2 [5, 4] [0, 2] [3, 0] w w
3 [2, 1] [7, 2] [5, 4] w w