Pandas တွင် ပြင်ဆင်နည်း- settingwithcopywarning


ပန်ဒါများကို အသုံးပြုရာတွင် သင်ကြုံတွေ့ရနိုင်သည့် သတိပေးချက်တစ်ခုမှာ-

 SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.

ပန်ဒါများသည် ကွင်းဆက်တာဝန်ပေးခြင်း – အဆင့်တစ်ဆင့်တွင် ကွင်းဆက်ခြင်းနှင့် တာဝန်ကို ပေါင်းစပ်ခြင်းဟုခေါ်သော အရာတစ်ခုကို ပန်ဒါများကြုံတွေ့ရသောအခါတွင် ဤသတိပေးချက်ပေါ်လာပါသည်။

၎င်းသည် သတိပေးချက် မျှသာဖြစ်ပြီး အမှားအယွင်းမဟုတ်ကြောင်း သတိပြုရန် အရေးကြီးပါသည်။ သင့်ကုဒ်သည် ဆက်လက်လည်ပတ်နေမည်ဖြစ်ပြီး၊ သို့သော် ရလဒ်များသည် သင်မျှော်လင့်ထားသည့်အတိုင်း အမြဲမဖြစ်နိုင်ပါ။

ဤသတိပေးချက်ကို နှိမ်နှင်းရန် အလွယ်ကူဆုံးနည်းလမ်းမှာ အောက်ပါကုဒ်အပိုင်းအစကို အသုံးပြုခြင်းဖြစ်သည်-

 p.d. options . fashion . chained_assignment = None

အောက်ဖော်ပြပါ ဥပမာသည် ဤသတိပေးချက်ကို လက်တွေ့တွင် မည်သို့တုံ့ပြန်ရမည်ကို ပြသထားသည်။

သတိပေးချက်ကို ဘယ်လိုမျိုးပွားမလဲ။

ကျွန်ုပ်တို့သည် အောက်ပါ ပန်ဒါ DataFrame ကို ဖန်တီးသည်ဆိုပါစို့။

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' A ': [25, 12, 15, 14, 19, 23, 25, 29],
                   ' B ': [5, 7, 7, 9, 12, 9, 9, 4],
                   ' C ': [11, 8, 10, 6, 6, 5, 9, 12]})

#view DataFrame
df

	A B C
0 25 5 11
1 12 7 8
2 15 7 10
3 14 9 6
4 19 12 6
5 23 9 5
6 25 9 9
7 29 4 12

ယခု ကျွန်ုပ်တို့သည် မူရင်း DataFrame မှကော်လံ “ A” သာပါရှိသော DataFrame အသစ်တစ်ခုကို ဖန်တီးပြီး ကော်လံ “ A” တွင် တန်ဖိုးတစ်ခုစီကို 2 ဖြင့် ပိုင်းမည်ဆိုပါစို့-

 #define new DataFrame
df2 = df[[' A ']]

#divide all values in column 'A' by 2
df2[' A '] = df[' A '] / 2

/srv/conda/envs/notebook/lib/python3.7/site-packages/ipykernel_launcher.py:2:
SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

မူရင်း DataFrame ၏ “ အချပ်” ပေါ်တွင် ကော်လံ “ A” အတွက် တန်ဖိုးအသစ်များကို သတ်မှတ်ပေးသောကြောင့် SettingWithCopyWarning မက်ဆေ့ဂျ်ကို လက်ခံရရှိပါသည်။

သို့သော်၊ ကျွန်ုပ်တို့ဖန်တီးထားသော DataFrame အသစ်ကိုကြည့်လျှင်၊ တန်ဖိုးတစ်ခုစီကို အမှန်တကယ် 2 ဖြင့် ပိုင်းခြားထားသည်ကို တွေ့ရမည်ဖြစ်ပါသည်။

 #view new DataFrame
df2

     HAS
0 12.5
1 6.0
2 7.5
3 7.0
4 9.5
5 11.5
6 12.5
7 14.5

ကျွန်ုပ်တို့သည် သတိပေးစာတစ်စောင်ကို လက်ခံရရှိသော်လည်း ပန်ဒါများသည် ကျွန်ုပ်တို့ပြုလုပ်မည်ဟု ထင်ထားသည့်အတိုင်း လုပ်ဆောင်နေဆဲဖြစ်သည်။

သတိပေးချက်ကို ဘယ်လိုရှောင်ရမလဲ

ဤသတိပေးချက်ကို ရှောင်ရှားရန်၊ အောက်ပါအတိုင်း .loc[row indexer, col indexer] syntax ကို အသုံးပြုရန် အကြံပြုအပ်ပါသည်။

 #define new DataFrame
df2 = df. loc [:,[' A ']]

#divide each value in column 'A' by 2
df2[' A '] = df[' A '] / 2

#view result
df2

     HAS
0 12.5
1 6.0
2 7.5
3 7.0
4 9.5
5 11.5
6 12.5
7 14.5

DataFrame အသစ်တွင် မူရင်း DataFrame ရှိ ကော်လံ “ A” မှ တန်ဖိုးများ အားလုံးကို နှစ်ခုဖြင့် ပိုင်းခြားထားပြီး သတိပေးစာများ မပေါ်ပါ။

သတိပေးချက် မက်ဆေ့ချ်ကို ပြသခြင်းမှ တားဆီးလိုပါက အောက်ပါ ကုဒ်အပိုင်းအစကို အသုံးပြုနိုင်ပါသည်။

 #prevent SettingWithCopyWarning message from appearing
p.d. options . fashion . chained_assignment = None

ကွင်းဆက်တာဝန်ကို အဘယ်ကြောင့် ရှောင်ကြဉ်ရသနည်း ဟူသော အသေးစိတ်ရှင်းလင်းချက်အတွက်၊ အွန်လိုင်းပန်ဒါစာတမ်းပြုစုခြင်းကို ကိုးကားပါ။

ထပ်လောင်းအရင်းအမြစ်များ

ပြင်ဆင်နည်း- ပန်ဒါအမည်ရှိ မော်ဂျူးမရှိပါ။
ပြင်ဆင်နည်း- numpy ဟု အမည်ပေးထားသည့် မော်ဂျူးမရှိပါ။
ပြုပြင်နည်း- ကော်လံများ ထပ်နေသော်လည်း နောက်ဆက်တွဲကို သတ်မှတ်မထားပါ။

မှတ်ချက်တစ်ခုထည့်ပါ။

သင့် email လိပ်စာကို ဖော်ပြမည် မဟုတ်ပါ။ လိုအပ်သော ကွက်လပ်များကို * ဖြင့်မှတ်သားထားသည်