পাইথন পান্ডাস ব্যবহারকারীর সতর্কতা: বাছাই করা হচ্ছে কারণ অন-কনটেনটেশন অক্ষটি সারিবদ্ধ নয়


94

ব্যবহারকারীর এই সতর্কতাটি গ্রহণ করার সময় আমি কিছু কোড অনুশীলন করছি এবং ডেটা ফ্রেমের সংশ্লেষ প্রয়োগ করছি

/usr/lib64/python2.7/site-packages/pandas/core/frame.py:6201: ভবিষ্যত সতর্কতা: বাছাই করা হচ্ছে কারণ অনিচ্ছুক অক্ষটি সারিবদ্ধ নয়। পান্ডার ভবিষ্যতের সংস্করণটি ডিফল্ট অনুসারে বাছাই না করে পরিবর্তিত হবে। ভবিষ্যতের আচরণ গ্রহণ করতে, 'সাজান = সত্য' পাস করুন। বর্তমান আচরণ বজায় রাখতে এবং সতর্কবার্তাটি নীরব করতে, সাজান = মিথ্যা পাস করুন

কোডের এই লাইনে: আপনি কি এই সতর্কতার সমাধান পেতে সহায়তা করতে পারেন?

placement_video = [self.read_sql_vdx_summary, self.read_sql_video_km]
placement_video_summary = reduce(lambda left, right: pd.merge(left, right, on='PLACEMENT', sort=False), placement_video)


placement_by_video = placement_video_summary.loc[:, ["PLACEMENT", "PLACEMENT_NAME", "COST_TYPE", "PRODUCT",
                                                     "VIDEONAME", "VIEW0", "VIEW25", "VIEW50", "VIEW75",
                                                     "VIEW100",
                                                     "ENG0", "ENG25", "ENG50", "ENG75", "ENG100", "DPE0",
                                                     "DPE25",
                                                     "DPE50", "DPE75", "DPE100"]]

# print (placement_by_video)

placement_by_video["Placement# Name"] = placement_by_video[["PLACEMENT",
                                                            "PLACEMENT_NAME"]].apply(lambda x: ".".join(x),
                                                                                     axis=1)

placement_by_video_new = placement_by_video.loc[:,
                         ["PLACEMENT", "Placement# Name", "COST_TYPE", "PRODUCT", "VIDEONAME",
                          "VIEW0", "VIEW25", "VIEW50", "VIEW75", "VIEW100",
                          "ENG0", "ENG25", "ENG50", "ENG75", "ENG100", "DPE0", "DPE25",
                          "DPE50", "DPE75", "DPE100"]]

placement_by_km_video = [placement_by_video_new, self.read_sql_km_for_video]
placement_by_km_video_summary = reduce(lambda left, right: pd.merge(left, right, on=['PLACEMENT', 'PRODUCT'], sort=False),
                                       placement_by_km_video)

#print (list(placement_by_km_video_summary))
#print(placement_by_km_video_summary)
#exit()
# print(placement_by_video_new)
"""Conditions for 25%view"""
mask17 = placement_by_km_video_summary["PRODUCT"].isin(['Display', 'Mobile'])
mask18 = placement_by_km_video_summary["COST_TYPE"].isin(["CPE", "CPM", "CPCV"])
mask19 = placement_by_km_video_summary["PRODUCT"].isin(["InStream"])
mask20 = placement_by_km_video_summary["COST_TYPE"].isin(["CPE", "CPM", "CPE+", "CPCV"])
mask_video_video_completions = placement_by_km_video_summary["COST_TYPE"].isin(["CPCV"])
mask21 = placement_by_km_video_summary["COST_TYPE"].isin(["CPE+"])
mask22 = placement_by_km_video_summary["COST_TYPE"].isin(["CPE", "CPM"])
mask23 = placement_by_km_video_summary["PRODUCT"].isin(['Display', 'Mobile', 'InStream'])
mask24 = placement_by_km_video_summary["COST_TYPE"].isin(["CPE", "CPM", "CPE+"])

choice25video_eng = placement_by_km_video_summary["ENG25"]
choice25video_vwr = placement_by_km_video_summary["VIEW25"]
choice25video_deep = placement_by_km_video_summary["DPE25"]

placement_by_km_video_summary["25_pc_video"] = np.select([mask17 & mask18, mask19 & mask20, mask17 & mask21],
                                                  [choice25video_eng, choice25video_vwr, choice25video_deep])


"""Conditions for 50%view"""
choice50video_eng = placement_by_km_video_summary["ENG50"]
choice50video_vwr = placement_by_km_video_summary["VIEW50"]
choice50video_deep = placement_by_km_video_summary["DPE50"]

placement_by_km_video_summary["50_pc_video"] = np.select([mask17 & mask18, mask19 & mask20, mask17 & mask21],
                                                  [choice50video_eng,
                                                   choice50video_vwr, choice50video_deep])

"""Conditions for 75%view"""

choice75video_eng = placement_by_km_video_summary["ENG75"]
choice75video_vwr = placement_by_km_video_summary["VIEW75"]
choice75video_deep = placement_by_km_video_summary["DPE75"]

placement_by_km_video_summary["75_pc_video"] = np.select([mask17 & mask18, mask19 & mask20, mask17 & mask21],
                                                  [choice75video_eng,
                                                   choice75video_vwr,
                                                   choice75video_deep])

"""Conditions for 100%view"""

choice100video_eng = placement_by_km_video_summary["ENG100"]
choice100video_vwr = placement_by_km_video_summary["VIEW100"]
choice100video_deep = placement_by_km_video_summary["DPE100"]
choicecompletions = placement_by_km_video_summary['COMPLETIONS']

placement_by_km_video_summary["100_pc_video"] = np.select([mask17 & mask22, mask19 & mask24, mask17 & mask21, mask23 & mask_video_video_completions],
                                                          [choice100video_eng, choice100video_vwr, choice100video_deep, choicecompletions])



"""conditions for 0%view"""

choice0video_eng = placement_by_km_video_summary["ENG0"]
choice0video_vwr = placement_by_km_video_summary["VIEW0"]
choice0video_deep = placement_by_km_video_summary["DPE0"]

placement_by_km_video_summary["Views"] = np.select([mask17 & mask18, mask19 & mask20, mask17 & mask21],
                                                   [choice0video_eng,
                                                    choice0video_vwr,
                                                    choice0video_deep])


#print (placement_by_km_video_summary)
#exit()

#final Table

placement_by_video_summary = placement_by_km_video_summary.loc[:,
                             ["PLACEMENT", "Placement# Name", "PRODUCT", "VIDEONAME", "COST_TYPE",
                              "Views", "25_pc_video", "50_pc_video", "75_pc_video","100_pc_video",
                              "ENGAGEMENTS","IMPRESSIONS", "DPEENGAMENTS"]]

#placement_by_km_video = [placement_by_video_summary, self.read_sql_km_for_video]
#placement_by_km_video_summary = reduce(lambda left, right: pd.merge(left, right, on=['PLACEMENT', 'PRODUCT']),
                                       #placement_by_km_video)


#print(placement_by_video_summary)
#exit()
# dup_col =["IMPRESSIONS","ENGAGEMENTS","DPEENGAMENTS"]

# placement_by_video_summary.loc[placement_by_video_summary.duplicated(dup_col),dup_col] = np.nan

# print ("Dhar",placement_by_video_summary)

'''adding views based on conditions'''
#filter maximum value from videos

placement_by_video_summary_new = placement_by_km_video_summary.loc[
    placement_by_km_video_summary.reset_index().groupby(['PLACEMENT', 'PRODUCT'])['Views'].idxmax()]
#print (placement_by_video_summary_new)
#exit()
# print (placement_by_video_summary_new)
# mask22 = (placement_by_video_summary_new.PRODUCT.str.upper ()=='DISPLAY') & (placement_by_video_summary_new.COST_TYPE=='CPE')

placement_by_video_summary_new.loc[mask17 & mask18, 'Views'] = placement_by_video_summary_new['ENGAGEMENTS']
placement_by_video_summary_new.loc[mask19 & mask20, 'Views'] = placement_by_video_summary_new['IMPRESSIONS']
placement_by_video_summary_new.loc[mask17 & mask21, 'Views'] = placement_by_video_summary_new['DPEENGAMENTS']

#print (placement_by_video_summary_new)
#exit()
placement_by_video_summary = placement_by_video_summary.drop(placement_by_video_summary_new.index).append(
    placement_by_video_summary_new).sort_index()

placement_by_video_summary["Video Completion Rate"] = placement_by_video_summary["100_pc_video"] / \
                                                      placement_by_video_summary["Views"]

placement_by_video_final = placement_by_video_summary.loc[:,
                           ["Placement# Name", "PRODUCT", "VIDEONAME", "Views",
                            "25_pc_video", "50_pc_video", "75_pc_video", "100_pc_video",
                            "Video Completion Rate"]]

উত্তর:


138

tl; dr:

concatএবং appendকলামগুলি মেলে না, তবে বর্তমানে অ-কনটেনটেশন সূচকটি (যেমন আপনি সারিগুলি যুক্ত করছেন কলামগুলি) সাজান। পান্ডাস 0.23 এ এটি একটি সতর্কতা তৈরি করা শুরু করে; sort=Trueএটি নিঃশব্দ করার জন্য প্যারামিটারটি পাস করুন । ভবিষ্যতে ডিফল্টটি বাছাই না করে পরিবর্তিত হবে , তাই এখন sort=Trueবা Falseএখন নির্দিষ্ট করে দেওয়া ভাল বা এখনও আপনার নন-কনটেনটেশন সূচকগুলি মেলে তা নিশ্চিত করে নেওয়া ভাল।


পান্ডাস 0.23.0 এ সতর্কতাটি নতুন :

প্যান্ডাসের ভবিষ্যতের সংস্করণে pandas.concat()এবং DataFrame.append()ইতিমধ্যে সংযুক্ত না থাকলে অ-কনকনটেশন অক্ষটি আর সারণি করে না। বর্তমানের আচরণটি পূর্ববর্তী (বাছাই করার মতো) একই রকম, তবে এখন যখন একটি সর্তক নির্দিষ্ট করা না থাকে এবং অ-অবক্ষয় অক্ষটি সংযুক্ত না হয়, লিঙ্ক হয় তখন একটি সতর্কতা জারি করা হয় ।

লিঙ্কযুক্ত খুব পুরানো গিথুব ইস্যু থেকে আরও তথ্য , স্মিনির্নির মন্তব্য :

ডেটা ফ্রেমগুলি একত্রীকরণ করার সময়, কলামের নামগুলি বর্ণানুক্রমিকভাবে বাছাই করা হয় যদি তাদের মধ্যে কোনও পার্থক্য থাকে। যদি তারা ডেটাফ্রেমগুলিতে অভিন্ন হয় তবে সেগুলি সাজানো হয় না।

এই বাছাইটি অননুমোদিত এবং অযাচিত। অবশ্যই ডিফল্ট আচরণটি নো বাছাই করা উচিত।

কিছুক্ষণ পরে প্যারামিটারটি sortপ্রয়োগ করা হয়েছিল pandas.concatএবং DataFrame.append:

সাজান : বুলিয়ান, ডিফল্ট কিছুই নয় None

'বাহ্যিক' যোগদানের পরে যদি তা ইতিমধ্যে সংযুক্ত না হয় তবে অ-কনকনেটেশন অক্ষটি বাছাই করুন। বাছাইয়ের বর্তমান ডিফল্টটি অবহিত করা হয়েছে এবং পান্ডার ভবিষ্যতের সংস্করণে নং-বাছাইতে পরিবর্তিত হবে।

স্পষ্টভাবে পাস সাজান = সতর্কতা নিরবচ্ছিন্ন করতে এবং সাজানোর জন্য সত্য। স্পষ্টভাবে পাস বাছাই করুন = সতর্কতা নিঃশব্দ করতে মিথ্যা এবং বাছাই না।

এর সাথে = 'অভ্যন্তরীণ' যোগদানের পরে এর কোনও প্রভাব নেই, যা ইতিমধ্যে অ-কনকনেশন অ্যাক্সেসের ক্রম সংরক্ষণ করে।

সুতরাং যদি উভয় ডেটাফ্রেমগুলির একই ক্রমে একই কলাম থাকে, তবে কোনও সতর্কতা এবং বাছাই নেই:

df1 = pd.DataFrame({"a": [1, 2], "b": [0, 8]}, columns=['a', 'b'])
df2 = pd.DataFrame({"a": [4, 5], "b": [7, 3]}, columns=['a', 'b'])

print (pd.concat([df1, df2]))
   a  b
0  1  0
1  2  8
0  4  7
1  5  3

df1 = pd.DataFrame({"a": [1, 2], "b": [0, 8]}, columns=['b', 'a'])
df2 = pd.DataFrame({"a": [4, 5], "b": [7, 3]}, columns=['b', 'a'])

print (pd.concat([df1, df2]))
   b  a
0  0  1
1  8  2
0  7  4
1  3  5

তবে যদি ডেটাফ্রেমগুলির বিভিন্ন কলাম বা ভিন্ন ক্রমে একই কলাম থাকে তবে কোনও প্যারামিটার sortসুস্পষ্টভাবে সেট না করা থাকলে পান্ডাস একটি সতর্কতা ফিরিয়ে দেয় ( sort=Noneএটি ডিফল্ট মান):

df1 = pd.DataFrame({"a": [1, 2], "b": [0, 8]}, columns=['b', 'a'])
df2 = pd.DataFrame({"a": [4, 5], "b": [7, 3]}, columns=['a', 'b'])

print (pd.concat([df1, df2]))

ফিউচার ওয়ার্নিং: বাছাই করা হচ্ছে কারণ অন-কনটেস্টেশন অক্ষটি সারিবদ্ধ নয়।

   a  b
0  1  0
1  2  8
0  4  7
1  5  3

print (pd.concat([df1, df2], sort=True))
   a  b
0  1  0
1  2  8
0  4  7
1  5  3

print (pd.concat([df1, df2], sort=False))
   b  a
0  0  1
1  8  2
0  7  4
1  3  5

DataFrames বিভিন্ন কলাম আছে, কিন্তু প্রথম কলাম প্রান্তিককৃত হয় - তারা সঠিকভাবে (কলাম একে অপরের সাথে নির্ধারিত হবে aএবং bথেকে df1সঙ্গে aএবং bথেকে df2নীচে দেওয়া উদাহরণে) কারণ তারা উভয় রয়েছে। অন্য কলামগুলির জন্য যা একটিতে বিদ্যমান তবে উভয় ডেটা ফ্রেম নয়, অনুপস্থিত মান তৈরি করা হয়।

সবশেষে, আপনি পাস করলে sort=Trueকলামগুলি বর্ণানুক্রমিকভাবে বাছাই করা হয়। যদি sort=Falseএবং দ্বিতীয় দাফাফ্রেমে কলামগুলি থাকে যা প্রথমটি না থাকে তবে সেগুলি বিনা বাছাইয়ের সাথে শেষ পর্যন্ত যুক্ত করা হয়:

df1 = pd.DataFrame({"a": [1, 2], "b": [0, 8], 'e':[5, 0]}, 
                    columns=['b', 'a','e'])
df2 = pd.DataFrame({"a": [4, 5], "b": [7, 3], 'c':[2, 8], 'd':[7, 0]}, 
                    columns=['c','b','a','d'])

print (pd.concat([df1, df2]))

ফিউচার ওয়ার্নিং: বাছাই করা হচ্ছে কারণ অন-কনটেস্টেশন অক্ষটি সারিবদ্ধ নয়।

   a  b    c    d    e
0  1  0  NaN  NaN  5.0
1  2  8  NaN  NaN  0.0
0  4  7  2.0  7.0  NaN
1  5  3  8.0  0.0  NaN

print (pd.concat([df1, df2], sort=True))
   a  b    c    d    e
0  1  0  NaN  NaN  5.0
1  2  8  NaN  NaN  0.0
0  4  7  2.0  7.0  NaN
1  5  3  8.0  0.0  NaN

print (pd.concat([df1, df2], sort=False))

   b  a    e    c    d
0  0  1  5.0  NaN  NaN
1  8  2  0.0  NaN  NaN
0  7  4  NaN  2.0  7.0
1  3  5  NaN  8.0  0.0

আপনার কোডে:

placement_by_video_summary = placement_by_video_summary.drop(placement_by_video_summary_new.index)
                                                       .append(placement_by_video_summary_new, sort=True)
                                                       .sort_index()

21
আমি এটি পুরোপুরি বুঝতে পারি না: In a future version of pandas pandas.concat() and DataFrame.append() will no longer sort the non-concatenation axis when it is not already aligned. একটি non-concatenation axisকী এবং ফলাফলটি কেমন হবে? কলাম ক এবং ক কলাম মিলবে না? নাকি শুধু কলামের অর্ডার আলাদা?
অফারটি

9
এটির is not alignedঅর্থ কী তা পরিষ্কার নয় - আপনি কি সে সম্পর্কে মন্তব্য করতে পারেন?
মিস্টার_আর_আমস_ডি

4
আমি বিশ্বাস করি alignedযে অক্ষের স্তরগুলি একই রকম: যদি কোনও ধরণের পার্থক্য থাকে তবে তারা আর alignedথাকবে না এবং এই আচরণটি ট্রিগার করবে (উদাহরণস্বরূপ যদি অক্ষের স্তর হয় ['c','b','a']এবং ['a'])
রবার্ট মুইল

4
@ রবার্টমুইল আমি মনে করি যে levelএখানে একটি শব্দটি ব্যবহার করা সম্ভাব্য বিভ্রান্তিকর কারণ হিসাবে levelযখন কোনও মাল্টিইন্ডেক্স রয়েছে তখন পান্ডাস ডেটাফ্রেমের একটি নির্দিষ্ট অর্থ রয়েছে। আমি যা বুঝতে পারি তা থেকে, alignedএই প্রসঙ্গে সারি / কলাম সূচীর ক্রমকে বোঝায়। সুতরাং যদি আপনার দুটি ফ্রেমের জন্য নন-কনকেশনেশন অক্ষ সূচক ক্রমটি আলাদা হয়, তবে আপনি প্রথম ফ্রেমে উত্তীর্ণ হওয়া অর্ডারটি ধরে রাখতে হবে এবং দ্বিতীয় ফ্রেমটিকে মেলাতে বাছাই করতে বা কনটেনটেশনের আগে দুটি ফ্রেমের সূচীটি সাজানোর জন্য নির্দিষ্ট করতে পারেন। এটি আমার জন্যও একটি বিভ্রান্তিকর অঞ্চল তাই সংশোধন স্বাগত!
ac24

কলামগুলি যখন সারিবদ্ধ হয় tuple(df1.columns) == tuple(df2.columns)। নন-কনটেনটেশন অক্ষটি হ'ল অক্ষ (সারি বা কলাম) সমুদ্রের সমান্তরাল যা বরাবর ডেটাফ্রেমগুলি একসাথে সেলাই করা হচ্ছে।
বলপয়েন্টবেন

107

জিজরেলের উত্তর ভাল, তবে আমার কাছে থাকা একটি প্রশ্নের উত্তর দেয়নি: "সাজানো" পতাকাটি কোনওভাবেই আমার ডেটা গোলমাল করবে? উত্তরটি আপাতদৃষ্টিতে "না", আপনি যেভাবেই ভাল আছেন।

from pandas import DataFrame, concat

a = DataFrame([{'a':1,      'c':2,'d':3      }])
b = DataFrame([{'a':4,'b':5,      'd':6,'e':7}])

>>> concat([a,b],sort=False)
   a    c  d    b    e
0  1  2.0  3  NaN  NaN
0  4  NaN  6  5.0  7.0

>>> concat([a,b],sort=True)
   a    b    c  d    e
0  1  NaN  2.0  3  NaN
0  4  5.0  NaN  6  7.0

এখানে বাছাই করা বা না বাছাই করা ঠিক কি?
বেন

4
@ বেন সতর্কতা প্রদর্শিত হয় যখন কলামের ক্রম ডেটাফ্রেমগুলির মধ্যে আলাদা থাকে। আপনি দেখতে পাচ্ছেন যে সাজান = সত্য হলে
কনটেন্টেশন করার

এই উদাহরণে এটি হয় না তবে আপনি যদি ডেটটাইম ইন্ডেক্সের সাথে একাধিক সিরিজ বা ডেটাফ্রেমগুলি একত্রিত করেন তবে সারিগুলি আর কালানুক্রমিক ক্রমে থাকে না। প্রযুক্তিগতভাবে ডেটা গণ্ডগোল করে না তবে আপনার ফলাফলটি পড়া আরও কঠিন হতে পারে।
hugovdberg
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.