Veri çerçevesini düşünün df
df = pd.DataFrame(dict(A=[1, 2], B=['X', 'Y']))
df
A B
0 1 X
1 2 Y
Eğer kaydırırsam axis=0
(varsayılan)
df.shift()
A B
0 NaN NaN
1 1.0 X
Beklendiği gibi tüm satırları bir satır aşağı iter.
Ama ben vardığımda axis=1
df.shift(axis=1)
A B
0 NaN NaN
1 NaN NaN
Beklediğimde her şey boş
A B
0 NaN 1
1 NaN 2
Bunun neden olduğunu anlıyorum. Çünkü axis=0
, Pandalar her bir sütunun tek bir sütun olduğu sütuna göre işlemektedir dtype
ve vites değiştirirken, NaN
başlangıçta veya sonda girilen değerle nasıl başa çıkılacağı konusunda açık bir protokol vardır . Ancak birlikte axis=1
ilerlerken dtype
bir sütundan diğerine potansiyel belirsizliği getiriyoruz . Bu durumda, int64
bir object
sütuna zorlamak için çalışıyorum ve Pandalar sadece değerleri sıfırlamaya karar veriyor.
Bu daha büyük sorunlara yol açar dtypes
vardır int64
vefloat64
df = pd.DataFrame(dict(A=[1, 2], B=[1., 2.]))
df
A B
0 1 1.0
1 2 2.0
Ve aynı şey olur
df.shift(axis=1)
A B
0 NaN NaN
1 NaN NaN
Benim sorum
Ne iyi boyunca kaydırılır bir dataframe oluşturmak için seçenekler axis=1
hangi sonuç kaymıştır değerler ve dtypes?
İçin int64
/ float64
durumda sonuç gibi görünecektir:
df_shifted
A B
0 NaN 1
1 NaN 2
ve
df_shifted.dtypes
A object
B int64
dtype: object
Daha kapsamlı bir örnek
df = pd.DataFrame(dict(A=[1, 2], B=[1., 2.], C=['X', 'Y'], D=[4., 5.], E=[4, 5]))
df
A B C D E
0 1 1.0 X 4.0 4
1 2 2.0 Y 5.0 5
Böyle görünmeli
df_shifted
A B C D E
0 NaN 1 1.0 X 4.0
1 NaN 2 2.0 Y 5.0
df_shifted.dtypes
A object
B int64
C float64
D object
E float64
dtype: object
object
blocks
. <Bunun yerine şunu kullanın ve bkz.df = pd.DataFrame(dict(A=[1, 2], B=[3., 4.], C=['X', 'Y'], D=[5., 6.], E=[7, 8], F=['W', 'Z']))
object
?