pandas.DataFrame.combine_first এছাড়াও কাজ করে।
( মনোযোগ দিন: যেহেতু "ফলাফল সূচক কলামগুলি সংশ্লিষ্ট সূচি এবং কলামগুলির মিলন হবে" তাই আপনার সূচিটি পরীক্ষা করা উচিত এবং কলামগুলি মিলেছে ))
import numpy as np
import pandas as pd
df = pd.DataFrame([["1","cat","mouse"],
["2","dog","elephant"],
["3","cat","giraf"],
["4",np.nan,"ant"]],columns=["Day","Cat1","Cat2"])
In: df["Cat1"].combine_first(df["Cat2"])
Out:
0 cat
1 dog
2 cat
3 ant
Name: Cat1, dtype: object
অন্যান্য উত্তরের সাথে তুলনা করুন:
%timeit df["Cat1"].combine_first(df["Cat2"])
181 µs ± 11.3 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit df['Cat1'].fillna(df['Cat2'])
253 µs ± 10.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit np.where(df.Cat1.isnull(), df.Cat2, df.Cat1)
88.1 µs ± 793 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
আমি নীচে এই পদ্ধতিটি ব্যবহার করিনি:
def is_missing(Cat1,Cat2):
if np.isnan(Cat1):
return Cat2
else:
return Cat1
df['Cat1'] = df.apply(lambda x: is_missing(x['Cat1'],x['Cat2']),axis=1)
কারণ এটি একটি ব্যতিক্রম উত্থাপন করবে:
TypeError: ("ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''", 'occurred at index 0')
যার অর্থ np.isnan নেটিভ dtype (যেমন np.float64) এর NumPy অ্যারে প্রয়োগ করা যেতে পারে, তবে বস্তুর অ্যারে প্রয়োগ করার সময় TypeError উত্থাপন করে।
সুতরাং আমি পদ্ধতিটি সংশোধন করছি:
def is_missing(Cat1,Cat2):
if pd.isnull(Cat1):
return Cat2
else:
return Cat1
%timeit df.apply(lambda x: is_missing(x['Cat1'],x['Cat2']),axis=1)
701 µs ± 7.38 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
fillna
একটি সিরিজ লাগে।