আইলোক ব্যবহার করে মানগুলি সেট করা [বন্ধ]


13

এই লাইনটি ডেটাফ্রেমের combinedজন্য প্রথম 4 টি সারি দেয়feature_a

combined.iloc[0:4]["feature_a"]

প্রত্যাশিত হিসাবে, এই পরবর্তী লাইনটি কলামের জন্য ডেটাফ্রেমে 2 র্থ, চতুর্থ এবং 16 তম সারি প্রদান করে feature_a:

combined.iloc[[1,3,15]]["feature_a"]

এই পথের dataframe প্রথম 4 সারি সেট করে feature_aকরতে 77

combined.iloc[0:4]["feature_a"] = 77

এই লাইন কিছু করে। দীর্ঘ তালিকাতে প্রয়োগ করার পরে এটি বেশি সময় নেয় বলে কিছু ধরণের গণনা ঘটছে।

combined.iloc[[1,3,15]]["feature_a"] = 88

এটির সাথে চেক করা হলে ২ য়, চতুর্থ এবং ১th তম সারি সেট করা হয় না88 :

combined.iloc[[1,3,15]]["feature_a"]

আমি কীভাবে কোনও বিশাল কোডিং ডিটোর না নিয়ে ডেটাফ্রেমের কলামের সারিগুলির একটি স্বেচ্ছাসেবীর তালিকাটিকে একটি মান হিসাবে সেট করতে পারি?

এই দৃশ্যটি দেখে মনে হচ্ছে এটি বেশ সহজবোধ্য এবং সাধারণ হওয়া উচিত।


এটি কেবল প্রোগ্রামিং সম্পর্কে একটি প্রশ্ন (কোনও পরিসংখ্যান নেই) এবং এটি স্ট্যাক ওভারফ্লোতে সম্পর্কিত
জেক ওয়েস্টফল

কোনও সংক্ষিপ্ত প্রজননযোগ্য উদাহরণ ছাড়াই এই জাতীয় প্রশ্ন
স্ট্যাকওভারফ্লোতেও

উত্তর:


24

আপনি যদি নির্বাচকদের বিপরীত হন, এবং কলাম দ্বারা প্রথমে নির্বাচন করেন তবে এটি দুর্দান্ত কাজ করবে:

কোড:

df.feature_a.iloc[[1, 3, 15]] = 88

কেন?

আপনি যখন প্রথম (অ-কার্যক্ষম পদ্ধতি) করেছিলেন তখন আপনি ডেটা ফ্রেমের একটি অ-সঙ্গতিপূর্ণ বিভাগ নির্বাচন করছেন। আপনার এই সতর্কতাটি পাওয়া উচিত ছিল:

একটি ডেটা ফ্রেম থেকে একটি স্লাইসের অনুলিপিটিতে একটি মান সেট করার চেষ্টা করা হচ্ছে। পরিবর্তে .loc [সারি_ইনডেক্সার, কল_ইন্ডেক্সার] = মান ব্যবহার করে দেখুন

ডকুমেন্টেশনের সাবধানতাগুলি দেখুন: http://pandas.pydata.org/pandas- > ডক্স / স্থিতিশীল / সূচীকরণ html # সূচী-দর্শন বনাম-অনুলিপি

এটি কারণ সেখানে দুটি স্বতন্ত্র অপারেশন চলছে।

  1. combined.iloc[[1,3,15]]মাত্র তিনটি সারির একটি নতুন ডাটাফ্রেম তৈরি করে এবং ফ্রেমটি অনুলিপি করে অনুলিপি করা হয়। তারপর ...
  2. এর মাধ্যমে একটি কলাম নির্বাচন করুন ["feature_a"]তবে এটি অনুলিপিটির বিরুদ্ধে নির্বাচন করা হয়েছে।

সুতরাং অ্যাসাইনমেন্টটি অনুলিপিটিতে যায়। এটি ঠিক করার বিভিন্ন উপায় রয়েছে তবে এই ক্ষেত্রে প্রথমে কলামটি নির্বাচন করা আরও সহজ (এবং সস্তা), তারপরে অ্যাসাইনমেন্টের জন্য কলামগুলির অংশগুলি নির্বাচন করুন।

পরীক্ষার কোড:

df = pd.DataFrame(np.zeros((20, 3)), columns=['feature_a', 'b', 'c'])
df.feature_a.iloc[[1, 3, 15]] = 88
print(df)

ফলাফল:

    feature_a    b    c
0         0.0  0.0  0.0
1        88.0  0.0  0.0
2         0.0  0.0  0.0
3        88.0  0.0  0.0
4         0.0  0.0  0.0
5         0.0  0.0  0.0
6         0.0  0.0  0.0
7         0.0  0.0  0.0
8         0.0  0.0  0.0
9         0.0  0.0  0.0
10        0.0  0.0  0.0
11        0.0  0.0  0.0
12        0.0  0.0  0.0
13        0.0  0.0  0.0
14        0.0  0.0  0.0
15       88.0  0.0  0.0
16        0.0  0.0  0.0
17        0.0  0.0  0.0
18        0.0  0.0  0.0
19        0.0  0.0  0.0

1
এটি কাজ করতে পারে, কিন্তু কেন?
ম্যাথু ড্রুরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.