ডেটাফ্রেম বিবেচনা করুন 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
যা বরাবর স্থানান্তরিত হয় যাতে ফলাফলটি মান এবং টাইপগুলি স্থানান্তরিত করে?
জন্য 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
?