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 ဟု အမည်ပေးထားသည့် မော်ဂျူးမရှိပါ။
ပြုပြင်နည်း- ကော်လံများ ထပ်နေသော်လည်း နောက်ဆက်တွဲကို သတ်မှတ်မထားပါ။