我有一個有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