পান্ডাস ডেটা ফ্রেম: কলামের গড়ের সাথে ন্যানের মানগুলি প্রতিস্থাপন করুন


177

আমি বেশিরভাগ আসল সংখ্যায় ভরা একটি প্যান্ডাস ডেটাফ্রেম পেয়েছি তবে এর nanমধ্যে কয়েকটি মানও রয়েছে।

এসগুলিকে আমি nanযেখানে তারা কলামের গড়ের সাথে প্রতিস্থাপন করতে পারি ?

এই প্রশ্নটির সাথে এটির অনুরূপ: ন্যালি অ্যারে: কলামের গড়ের সাথে ন্যানের মানগুলি প্রতিস্থাপন করুন তবে দুর্ভাগ্যক্রমে, সেখানে দেওয়া সমাধানটি পান্ডাস ডেটা ফ্রেমের জন্য কাজ করে না।

উত্তর:


273

আপনি সরাসরি DataFrame.fillnaএটি পূরণ করতে ব্যবহার করতে পারেন nan:

In [27]: df 
Out[27]: 
          A         B         C
0 -0.166919  0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3       NaN -2.027325  1.533582
4       NaN       NaN  0.461821
5 -0.788073       NaN       NaN
6 -0.916080 -0.612343       NaN
7 -0.887858  1.033826       NaN
8  1.948430  1.025011 -2.982224
9  0.019698 -0.795876 -0.046431

In [28]: df.mean()
Out[28]: 
A   -0.151121
B   -0.231291
C   -0.530307
dtype: float64

In [29]: df.fillna(df.mean())
Out[29]: 
          A         B         C
0 -0.166919  0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3 -0.151121 -2.027325  1.533582
4 -0.151121 -0.231291  0.461821
5 -0.788073 -0.231291 -0.530307
6 -0.916080 -0.612343 -0.530307
7 -0.887858  1.033826 -0.530307
8  1.948430  1.025011 -2.982224
9  0.019698 -0.795876 -0.046431

এর ডক্টরসিং fillnaবলেছেন যে valueএটি একটি স্কেলার বা ডিক হওয়া উচিত, তবে এটি Seriesপাশাপাশি কাজ করবে বলে মনে হয় । আপনি যদি ডিক পাস করতে চান তবে আপনি ব্যবহার করতে পারেন df.mean().to_dict()


10
df.fillna(df.mean())নতুন ডেটাফ্রেম ফিরিয়ে দেবে, তাই df=df.fillna(df.mean())এটি রাখতে আপনাকে লিখতে হবে।
ইয়ানিস

কোনও ধারণাগুলি কেন এটি ব্যবহারের জন্য আমি ভুল পরিমাণকে অভিযুক্ত করে পাচ্ছি?
bernando_vialli

25
আপনার পরিবর্তে df=df.fillna(df.mean())এছাড়াও ব্যবহার করতে পারেনdf.fillna(df.mean(), inplace=True)
অ্যান্ডারসন পাইমেনটেল

19
সতর্কতা: আপনি যদি মেশিন লার্নিং / ডেটা সায়েন্সের জন্য এটি ব্যবহার করতে চান: ডেটা সায়েন্সের দৃষ্টিকোণ থেকে প্রথমে এনএ প্রতিস্থাপন করা এবং তারপরে ট্রেন ও পরীক্ষায় বিভক্ত হওয়া ভুল ... আপনি প্রথমে ট্রেন এবং পরীক্ষায় বিভক্ত হওয়া উচিত, তারপরে এনএ প্রতিস্থাপন করুন ট্রেনের মধ্য দিয়ে এবং তারপরে পরীক্ষার জন্য এই রাষ্ট্রীয় প্রিপ্রোসেসিং মডেলটি প্রয়োগ করুন, নীচের স্ক্লার্নযুক্ত জবাবটি দেখুন!
ফ্যাবিয়ান ওয়ার্নার

1
@ amalik2205 কারণ অন্যথায় আপনি পরীক্ষার সেট থেকে প্রশিক্ষণ সংস্থায় তথ্য ফাঁস করছেন! এটি এর মতো কল্পনা করুন: আমাদের কাছে 100 টি ডাটা সারি রয়েছে এবং আমরা কলাম x বিবেচনা করি। এক্স এর প্রথম 99 টি এন্ট্রি হ'ল এনএ। আমরা পরীক্ষা সেট হিসাবে সারি 100 কে বিভক্ত করতে চাই। ধরা যাক সারি 100 এর কলাম x এর মান 20 আছে। তারপরে আপনি কলাম x এর প্রশিক্ষণে সমস্ত এন্ট্রিগুলিকে 20 দিয়ে প্রতিস্থাপন করবেন, যা মান পরীক্ষার সেট থেকে 100% আসবে। সুতরাং, মূল্যায়ন আপনাকে বোকা হতে পারে!
ফ্যাবিয়ান ওয়ার্নার


27
In [16]: df = DataFrame(np.random.randn(10,3))

In [17]: df.iloc[3:5,0] = np.nan

In [18]: df.iloc[4:6,1] = np.nan

In [19]: df.iloc[5:8,2] = np.nan

In [20]: df
Out[20]: 
          0         1         2
0  1.148272  0.227366 -2.368136
1 -0.820823  1.071471 -0.784713
2  0.157913  0.602857  0.665034
3       NaN -0.985188 -0.324136
4       NaN       NaN  0.238512
5  0.769657       NaN       NaN
6  0.141951  0.326064       NaN
7 -1.694475 -0.523440       NaN
8  0.352556 -0.551487 -1.639298
9 -2.067324 -0.492617 -1.675794

In [22]: df.mean()
Out[22]: 
0   -0.251534
1   -0.040622
2   -0.841219
dtype: float64

প্রতি কলামে সেই কলামগুলির গড় প্রয়োগ করুন এবং পূরণ করুন

In [23]: df.apply(lambda x: x.fillna(x.mean()),axis=0)
Out[23]: 
          0         1         2
0  1.148272  0.227366 -2.368136
1 -0.820823  1.071471 -0.784713
2  0.157913  0.602857  0.665034
3 -0.251534 -0.985188 -0.324136
4 -0.251534 -0.040622  0.238512
5  0.769657 -0.040622 -0.841219
6  0.141951  0.326064 -0.841219
7 -1.694475 -0.523440 -0.841219
8  0.352556 -0.551487 -1.639298
9 -2.067324 -0.492617 -1.675794

4
আমি জানি না কেন, তবে df.fillna (df.mean ()) কার্যকর হয়নি, কেবল আপনার সংস্করণ প্রয়োগ রয়েছে। পাইথন 3
রকেটিক

12
# To read data from csv file
Dataset = pd.read_csv('Data.csv')

X = Dataset.iloc[:, :-1].values

# To calculate mean use imputer class
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])

এত সহজ বিকল্পগুলির মধ্যে এই সমস্তগুলির সুবিধা কী?
এএমসি

@ রোশন ঝা যুক্তিটি ব্যাখ্যা করা সর্বদা ভাল। আর অ্যান্ড পাইথনে একই কাজ করার অনেক উপায় রয়েছে। তবে, আপনি যদি অন্যরকম কিছু প্রস্তাব দিচ্ছেন তবে আপনি এটির কিছু অগ্রগতি উল্লেখ করতে চাইতে পারেন
ডঃ নিশা অরোরা

10

আপনি যদি অনুপস্থিত মানগুলিকে গড় বোঝাতে চান এবং আপনি কলাম অনুসারে কলাম যেতে চান, তবে এটি কেবল সেই কলামটির গড় দিয়েই বোঝা যাবে। এটি কিছুটা বেশি পঠনযোগ্য হতে পারে।

sub2['income'] = sub2['income'].fillna((sub2['income'].mean()))

3
এটি কীভাবে সমস্যার সমাধান করে তার কিছু ব্যাখ্যা সরবরাহ করুন।
গুড়বিন্দর সিং

10

সরাসরি নালীর df.fillna(df.mean())সমস্ত মান পূরণ করতে ব্যবহার করুন

আপনি যদি সেই কলামটির গড় দিয়ে নাল মান পূরণ করতে চান তবে আপনি এটি ব্যবহার করতে পারেন

ধরুন x=df['Item_Weight']এখানে Item_Weightকলামের নাম

এখানে আমরা নির্ধারিত করছি (x এর সাথে x এর নাল মানগুলি x দিয়ে x এর সাথে পূরণ করুন)

df['Item_Weight'] = df['Item_Weight'].fillna((df['Item_Weight'].mean()))

আপনি যদি কিছু স্ট্রিং দিয়ে নাল মান পূরণ করতে চান তবে ব্যবহার করুন

এখানে Outlet_sizeকলামের নাম

df.Outlet_Size = df.Outlet_Size.fillna('Missing')

9

উপরেরগুলি ছাড়াও অন্য একটি বিকল্প হ'ল:

df = df.groupby(df.columns, axis = 1).transform(lambda x: x.fillna(x.mean()))

এটি পূর্ববর্তী প্রতিক্রিয়াগুলির তুলনায় কম মার্জিত নয় তবে আপনি যদি অন্য কোনও কলাম ফাংশন দ্বারা নালগুলি প্রতিস্থাপন করতে চান তবে এটি আরও খাটো হতে পারে।


7

পান্ডাস: কীভাবে NaN ( nan) মানগুলি গড় (গড়), মধ্যক বা একটি কলামের অন্যান্য পরিসংখ্যানের সাথে প্রতিস্থাপন করবেন

আপনার ডেটাফ্রেমটি বলুন dfএবং আপনার কাছে একটি কলাম কল হয়েছে nr_items। এই: df['nr_items']

যদি আপনি চাই প্রতি প্রতিস্থাপনNaN আপনার কলামের মান df['nr_items']সঙ্গে কলামের গড় :

পদ্ধতি ব্যবহার করুন .fillna():

mean_value=df['nr_items'].mean()
df['nr_item_ave']=df['nr_items'].fillna(mean_value)

আমি পরিবর্তিত মানগুলি সহ নতুন কলামটি সংরক্ষণ করার জন্য একটি নতুন dfকলাম তৈরি করেছিnr_item_aveNaNmean

ব্যবহার করার সময় আপনার সতর্কতা অবলম্বন করা উচিত mean। আপনার যদি outliers থাকে তবে এটি ব্যবহার করার জন্য আরও প্রস্তাবিতmedian


0

স্কলারন লাইব্রেরি প্রিপ্রসেসিং ক্লাস ব্যবহার করে using

from sklearn.impute import SimpleImputer
missingvalues = SimpleImputer(missing_values = np.nan, strategy = 'mean', axis = 0)
missingvalues = missingvalues.fit(x[:,1:3])
x[:,1:3] = missingvalues.transform(x[:,1:3])

দ্রষ্টব্য: সাম্প্রতিক সংস্করণে প্যারামিটারের missing_valuesমান np.nanথেকে পরিবর্তনNaN

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