我有一个有400列和100行的pandas DataFrame,我想将它们显示为图像。产生这些数据的仪器确实需要每隔一行反转一次以使其正确显示。在numpy数组或熊猫中反向偶数据行DataFrame
我怎样才能逆转大熊猫或与numpy的特定行,如果变换为2D np.array(即行1,3,5,7 ... LEN(DF)?
我有一个有400列和100行的pandas DataFrame,我想将它们显示为图像。产生这些数据的仪器确实需要每隔一行反转一次以使其正确显示。在numpy数组或熊猫中反向偶数据行DataFrame
我怎样才能逆转大熊猫或与numpy的特定行,如果变换为2D np.array(即行1,3,5,7 ... LEN(DF)?
import pandas as pd
df = pd.DataFrame([range(5) for _ in range(10)],
index=list('abcdefghij'),
columns=list('abcde'))
print df
a b c d e
a 0 1 2 3 4
b 0 1 2 3 4
c 0 1 2 3 4
d 0 1 2 3 4
e 0 1 2 3 4
f 0 1 2 3 4
g 0 1 2 3 4
h 0 1 2 3 4
i 0 1 2 3 4
j 0 1 2 3 4
df.iloc[1::2, :] = df.iloc[1::2, ::-1].values
# ^^ ^
# | | Reverse
# Start |
# Every other row
示范
print df
a b c d e
a 0 1 2 3 4
b 4 3 2 1 0
c 0 1 2 3 4
d 4 3 2 1 0
e 0 1 2 3 4
f 4 3 2 1 0
g 0 1 2 3 4
h 4 3 2 1 0
i 0 1 2 3 4
j 4 3 2 1 0
df = pd.DataFrame([range(4)], columns=list('ABCD'), index=range(5))
>>> df
A B C D
0 0 1 2 3
1 0 1 2 3
2 0 1 2 3
3 0 1 2 3
4 0 1 2 3
创建一个您想要反转的行为True的掩码(例如, Even = False,Odd = True),使用loc
找到这些行并反转它们的值(::-1
是在Python中反转列表的常用方法)。
mask = [i % 2 == 1 for i in range(len(df))]
df.loc[mask] = df.loc[mask, ::-1].values
>>> df
A B C D
0 0 1 2 3
1 3 2 1 0
2 0 1 2 3
3 3 2 1 0
4 0 1 2 3
如果您的应用程序主要是图像处理,熊猫DataFrame可能是矫枉过正。下面是一个反转numpy数组的其他行的方法的示例。它在原地经营:
In [656]: a
Out[656]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
In [657]: a[1::2, :] = a[1::2, ::-1]
In [658]: a
Out[658]:
array([[ 0, 1, 2, 3],
[ 7, 6, 5, 4],
[ 8, 9, 10, 11],
[15, 14, 13, 12],
[16, 17, 18, 19],
[23, 22, 21, 20]])
太棒了,谢谢。运作良好! – GregW