সুপার সিম্পল কলাম অ্যাসাইনমেন্ট
একটি পান্ডাস ডেটা ফ্রেম কলামগুলির আদেশ আদেশ হিসাবে প্রয়োগ করা হয়।
এর অর্থ এই যে __getitem__ []কেবলমাত্র একটি নির্দিষ্ট কলামটি পেতে ব্যবহার করা যাবে না, তবে __setitem__ [] =একটি নতুন কলামটি বরাদ্দ করতে ব্যবহার করা যেতে পারে।
উদাহরণস্বরূপ, কেবলমাত্র []অ্যাক্সেসর ব্যবহার করে এই ডেটাফ্রেমে এটিতে একটি কলাম যুক্ত করা যেতে পারে
size name color
0 big rose red
1 small violet blue
2 small tulip red
3 small harebell blue
df['protected'] = ['no', 'no', 'no', 'yes']
size name color protected
0 big rose red no
1 small violet blue no
2 small tulip red no
3 small harebell blue yes
নোট করুন যে ডেটাফ্রেমের সূচি বন্ধ থাকলেও এটি কাজ করে।
df.index = [3,2,1,0]
df['protected'] = ['no', 'no', 'no', 'yes']
size name color protected
3 big rose red no
2 small violet blue no
1 small tulip red no
0 small harebell blue yes
[] = হ'ল উপায়, তবে নজর রাখুন!
তবে, যদি আপনার একটি থাকে pd.Seriesএবং সূচিগুলি বন্ধ থাকে এমন কোনও ডেটাফ্রেমে এটি নির্ধারণের চেষ্টা করেন, আপনি সমস্যায় পড়বেন। উদাহরণ দেখুন:
df['protected'] = pd.Series(['no', 'no', 'no', 'yes'])
size name color protected
3 big rose red yes
2 small violet blue no
1 small tulip red no
0 small harebell blue no
এটি কারণ pd.Seriesডিফল্টরূপে 0 থেকে n পর্যন্ত সূচকযুক্ত থাকে। এবং পান্ডাস [] =পদ্ধতিটি "স্মার্ট" হওয়ার চেষ্টা করে
আসলে কি চলছে।
আপনি যখন [] =পদ্ধতিটি ব্যবহার করেন পান্ডগুলি বাম হাতের ডেটাফ্রেমের সূচক এবং ডান হাতের সিরিজের সূচকটি ব্যবহার করে নিঃশব্দে একটি বাহ্যিক যোগ বা বাহ্যিক সংশ্লেষ সম্পাদন করে।df['column'] = series
সাইড নোট
এটি দ্রুত জ্ঞানীয় অসন্তোষ সৃষ্টি করে, যেহেতু []=পদ্ধতিটি ইনপুটটির উপর নির্ভর করে অনেকগুলি বিভিন্ন কাজ করার চেষ্টা করছে এবং পান্ডগুলি কীভাবে কাজ করে তা আপনি যদি না জানেন তবে ফলাফলটির পূর্বাভাস দেওয়া যায় না । সুতরাং আমি []=কোড বেসগুলির বিরুদ্ধে পরামর্শ দেব , কিন্তু যখন কোনও নোটবুকে ডেটা অন্বেষণ করা হয়, এটি ঠিক আছে।
সমস্যা ঘুরতে যাওয়া
যদি আপনার একটি থাকে pd.Seriesএবং এটি শীর্ষ থেকে নীচে পর্যন্ত নির্ধারিত হতে চান, বা আপনি যদি উত্পাদনশীল কোড কোডিং করছেন এবং আপনি সূচী আদেশের বিষয়ে নিশ্চিত নন তবে এই ধরণের ইস্যুটির জন্য এটি রক্ষা করা উপযুক্ত worth
আপনি pd.Seriesএকটি np.ndarrayবা একটিকে হ্রাস করতে পারেন list, এটি কৌশলটি করবে।
df['protected'] = pd.Series(['no', 'no', 'no', 'yes']).values
অথবা
df['protected'] = list(pd.Series(['no', 'no', 'no', 'yes']))
তবে এটি খুব স্পষ্ট নয়।
কিছু কোডার সাথে আসতে পারে এবং বলতে পারে "আরে, এগুলি অপ্রয়োজনীয় দেখায়, আমি কেবল এটিকে অপ্টিমাইজ করব"।
সুস্পষ্ট উপায়
সূচক নির্ধারণ pd.Seriesকরা সূচী dfস্পষ্ট হয়।
df['protected'] = pd.Series(['no', 'no', 'no', 'yes'], index=df.index)
বা আরও বাস্তবে, আপনার সম্ভবত pd.Seriesইতিমধ্যে একটি উপলব্ধ আছে available
protected_series = pd.Series(['no', 'no', 'no', 'yes'])
protected_series.index = df.index
3 no
2 no
1 no
0 yes
এখন নিয়োগ দেওয়া যেতে পারে
df['protected'] = protected_series
size name color protected
3 big rose red no
2 small violet blue no
1 small tulip red no
0 small harebell blue yes
সঙ্গে বিকল্প উপায় df.reset_index()
যেহেতু সূচকের বিচ্ছিন্নতা সমস্যা, আপনি যদি মনে করেন যে ডেটাফ্রেমের সূচকে জিনিসগুলি নির্ধারণ করা উচিত নয়, আপনি কেবল সূচকটি ফেলে দিতে পারেন, এটি দ্রুত হওয়া উচিত, তবে এটি খুব পরিষ্কার নয়, যেহেতু আপনার ফাংশন সম্ভবত দুটি কাজ করে।
df.reset_index(drop=True)
protected_series.reset_index(drop=True)
df['protected'] = protected_series
size name color protected
0 big rose red no
1 small violet blue no
2 small tulip red no
3 small harebell blue yes
নোট অন df.assign
যদিও df.assignএটিকে অনেক বেশী সুনিদৃষ্ট আপনি কি করছেন, এটা আসলে উপরের মতো একই সমস্যা রয়েছে[]=
df.assign(protected=pd.Series(['no', 'no', 'no', 'yes']))
size name color protected
3 big rose red yes
2 small violet blue no
1 small tulip red no
0 small harebell blue no
শুধু সঙ্গে সতর্ক df.assignআপনার কলাম বলা হয় না self। এটি ত্রুটি ঘটবে। এটি df.assign গন্ধযুক্ত করে তোলে , যেহেতু ফাংশনে এই ধরণের শিল্পকর্ম রয়েছে।
df.assign(self=pd.Series(['no', 'no', 'no', 'yes'])
TypeError: assign() got multiple values for keyword argument 'self'
আপনি বলতে পারেন, "ঠিক আছে, আমি selfতখনই ব্যবহার করব না "। তবে কে জানে ভবিষ্যতে নতুন যুক্তি সমর্থন করার জন্য এই ফাংশনটি কীভাবে পরিবর্তিত হয়। প্যান্ডাসের নতুন আপডেটে আপনার কলামের নামটি যুক্তি হয়ে উঠবে, আপগ্রেড করার ক্ষেত্রে সমস্যা তৈরি করবে।