डेटाफ्रेम पर विचार करें df
df = pd.DataFrame(dict(A=[1, 2], B=['X', 'Y']))
df
A B
0 1 X
1 2 Y
अगर मैं साथ axis=0(डिफ़ॉल्ट)
df.shift()
A B
0 NaN NaN
1 1.0 X
यह अपेक्षा के अनुसार सभी पंक्तियों को एक पंक्ति से नीचे धकेलता है।
लेकिन जब मैं साथ शिफ्ट होता हूं axis=1
df.shift(axis=1)
A B
0 NaN NaN
1 NaN NaN
जब मैं अपेक्षा करता हूं तो सब कुछ शून्य है
A B
0 NaN 1
1 NaN 2
मैं समझता हूं कि ऐसा क्यों हुआ। के लिए axis=0, पांडा स्तंभ से स्तंभ काम कर रहा है, जहां प्रत्येक स्तंभ एक भी है dtypeऔर जब स्थानांतरण, वहाँ कैसे शुरू की के साथ सौदा करने पर स्पष्ट प्रोटोकॉल है NaNशुरुआत या अंत में मूल्य। लेकिन जब axis=1हम साथ जाते हैं तो dtypeएक कॉलम से दूसरे कॉलम की संभावित अस्पष्टता का परिचय देते हैं । इस मामले में, मैं int64एक objectस्तंभ में बल के लिए कोशिश कर रहा हूं और पंडों ने मूल्यों को शून्य करने का फैसला किया है।
यह अधिक समस्याग्रस्त हो जाता है जब dtypesहोते हैं int64औरfloat64
df = pd.DataFrame(dict(A=[1, 2], B=[1., 2.]))
df
A B
0 1 1.0
1 2 2.0
और वही काम होता है
df.shift(axis=1)
A B
0 NaN NaN
1 NaN NaN
मेरा प्रश्न
डेटाफ़्रेम बनाने के लिए अच्छे विकल्प क्या हैं axis=1जिनके साथ स्थानांतरित किया गया है , जिसके परिणामस्वरूप मूल्यों और dtypes स्थानांतरित हो गए हैं?
के लिए int64/ float64मामले परिणाम दिखाई देगा:
df_shifted
A B
0 NaN 1
1 NaN 2
तथा
df_shifted.dtypes
A object
B int64
dtype: object
एक अधिक व्यापक उदाहरण
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
इस तरह दिखना चाहिए
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>> <के बजाय होता है और देखेंdf = pd.DataFrame(dict(A=[1, 2], B=[3., 4.], C=['X', 'Y'], D=[5., 6.], E=[7, 8], F=['W', 'Z']))
object?