טרנספורמציה של נתונים מאסטר בפנדות עם שלוש הטכניקות השימושיות הללו

צלילה לתוך סינון, מניפולציה ותפקוד

תמונה על ידי מילאד פקוריאן on Unsplash

חשבו על הפעם האחרונה שעבדתם עם מערך נתונים מעוצב בצורה יפה. עמודות עם שם טוב, ערכים חסרים מינימליים וארגון נכון. זו הרגשה נעימה - כמעט משחררת - להתברך בנתונים שלא צריך לנקות ולשנות.

ובכן, זה נחמד עד שאתה מתנתק מהחלום בהקיץ ותמשיך להתעסק עם הבלבול חסר התקווה של שורות שבורות ותוויות שטויות לפניך.

אין דבר כזה נתונים נקיים (בצורתם המקורית). אם אתה מדען נתונים, אתה יודע את זה. אם אתה רק מתחיל, אתה צריך לקבל את זה. תצטרך לשנות את הנתונים שלך כדי לעבוד איתם ביעילות.

בואו נדבר על שלוש דרכים לעשות זאת.

סינון - אבל מוסבר כראוי

בואו נדבר על סינון - אבל קצת יותר עמוק ממה שהייתם רגילים לעשות. בתור אחת הפעולות הנפוצות והשימושיות ביותר לשינוי נתונים, סינון יעיל הוא מיומנות חובה לכל מדען נתונים. אם אתה מכיר את הפנדות, כנראה שזו אחת הפעולות הראשונות שלמדת לעשות.

הבה נסקור, באמצעות הדוגמה המועדפת עלי, המגוונת בצורה מוזרה: DataFrame של ציוני תלמידים, הנקראת בצורה ראויה grades:

תמונה מאת המחבר

אנחנו הולכים לסנן כל ציון מתחת ל-90, מכיוון שביום זה החלטנו להיות מחנכים בעלי הכשרה לקויה שפונים רק לתלמידים המובילים (אנא, אל תעשה זאת באמת). שורת הקוד הסטנדרטית להשגת זאת היא כדלקמן:

ציונים[ציונים['ציון'] >= 90]
תמונה מאת המחבר

זה משאיר אותנו עם ג'ק והרמיוני. מגניב. אבל מה בדיוק קרה כאן? למה האם שורת הקוד שלמעלה עובדת? בואו נצלול קצת יותר לעומק על ידי התבוננות בפלט של הביטוי בתוך הסוגריים החיצוניים למעלה:

ציונים['ציון'] >= 90
תמונה מאת המחבר

אה בסדר. זה הגיוני. נראה ששורת קוד זו מחזירה אובייקט מסדרת Pandas שמחזיק בוליאני ( True / False ) ערכים שנקבעים לפי מה >= 90 הוחזר עבור כל שורה בודדת. זהו שלב הביניים המרכזי. לאחר מכן, סדרה זו של בוליאנים היא זו שמועברת לסוגריים החיצוניים ומסננת את כל השורות בהתאם.

למען ההשלמה, אציין גם שניתן להשיג את אותה התנהגות באמצעות ה loc מילת מפתח:

grades.loc[grades['Score'] >= 90]
תמונה מאת המחבר

ישנן מספר סיבות שאנו עשויים לבחור להשתמש בהן loc (אחד מהם הוא שהוא למעשה מאפשר לנו לסנן שורות ועמודות באמצעות פעולה אחת), אבל זה פותח פעולות של Pandora's Box of Pandas שעדיף להשאיר למאמר אחר.

לעת עתה, מטרת הלמידה החשובה היא זו: כאשר אנו מסננים בפנדות, התחביר המבלבל אינו סוג של קסם מוזר. אנחנו פשוט צריכים לחלק את זה לשני שלבים המרכיבים את זה: 1) קבלת סדרה בוליאנית של השורות שעומדות בתנאי שלנו, ו-2) שימוש בסדרה כדי לסנן את כל ה-DataFrame.

למה זה שימושי, אתם אולי שואלים? ובכן, באופן כללי, סביר להניח שזה יוביל לבאגים מבלבלים אם רק תשתמש בפעולות מבלי להבין כיצד הן פועלות בפועל. סינון הוא פעולה שימושית ונפוצה להפליא, וכעת אתה יודע איך זה עובד.

בוא נמשיך הלאה.

היופי של פונקציות הלמבדה

לפעמים, הנתונים שלך דורשים טרנספורמציות שפשוט אינן מובנות בפונקציונליות של Pandas. נסה ככל שתרצה, שום כמות של ניקוי Stack Overflow או חקירה שקודה של תיעוד Pandas לא חושפת פתרון לבעיה שלך.

הכנס לפונקציות למבדה - תכונת שפה שימושית המשתלבת יפה עם פנדות.

כסקירה מהירה, הנה איך עובדות הלמבדות:

>>> add_function = lambda x, y: x + y
>>> add_function(2, 3)
5

פונקציות למדה אינן שונות מפונקציות רגילות, למעט העובדה שיש להן תחביר תמציתי יותר:

  • שם הפונקציה משמאל לסימן השוויון
  • אל האני lambda מילת מפתח מימין לסימן השוויון (בדומה ל- def מילת מפתח בהגדרת פונקציית Python מסורתית, זה מאפשר לפייתון לדעת שאנחנו מגדירים פונקציה).
  • פרמטר(ים) לאחר ה- lambda מילת מפתח, משמאל לנקודתיים.
  • החזרת ערך מימין לנקודתיים.

כעת, בואו ניישם פונקציות למבדה על מצב מציאותי.

לערכות נתונים יש לעתים קרובות מוזרויות עיצוב משלהן, ספציפיות לווריאציות בהזנת נתונים ואיסוף נתונים. כתוצאה מכך, ייתכן שלנתונים שאתה עובד איתם יש בעיות ספציפיות באופן מוזר שעליך לטפל בהן. לדוגמה, קחו בחשבון את מערך הנתונים הפשוט להלן, המאחסן את שמות האנשים וההכנסות שלהם. בואו נקרא לזה monies.

תמונה מאת המחבר

כעת, בתור כבוד הנתונים הראשיים של החברה הזו, קיבלנו מידע סודי ביותר: כל אחד בחברה זו יקבל העלאה של 10% בתוספת 1000 דולר נוספים. זה כנראה חישוב ספציפי מדי מכדי למצוא לו שיטה ספציפית, אבל פשוט מספיק עם פונקציית למבדה:

update_income = lambda num: num + (מספר * .10) + 1000

לאחר מכן, כל שעלינו לעשות הוא להשתמש בפונקציה הזו עם הפנדות apply function, המאפשרת לנו להחיל פונקציה על כל רכיב בסדרה שנבחרה:

monies['New Income'] = monies['Income'].apply(update_income)
כספים
תמונה מאת המחבר

וסיימנו! DataFrame חדש ומבריק המורכב בדיוק מהמידע שהיינו צריכים, והכל בשתי שורות קוד. כדי לעשות את זה אפילו יותר תמציתי, יכולנו אפילו להגדיר את פונקציית הלמבדה בתוך apply ישירות - טיפ מגניב שכדאי לזכור.

אני אשמור את הנקודה כאן פשוטה.

למבדות שימושיות ביותר, ולכן כדאי להשתמש בהן. תהנה!

פונקציות מניפולציה של מחרוזות

בסעיף הקודם, דיברנו על הרבגוניות של פונקציות למבדה ועל כל הדברים המגניבים שהם יכולים לעזור לך להשיג עם הנתונים שלך. זה מצויין, אבל אתה צריך להיזהר לא להיסחף. זה נפוץ להפליא להיקלע לדרך מוכרת אחת לעשות דברים שאתה מפספס קיצורי דרך פשוטים יותר ש-Python ברכה בהם מתכנתים. זה תקף ליותר מסתם למבדות, כמובן, אבל אנחנו נישאר עם זה לרגע.

לדוגמה, נניח שיש לנו את ה-DataFrame הבא שנקרא names המאחסן את שמות המשפחה והשמות הפרטיים של אנשים:

תמונה מאת המחבר

כעת, עקב מגבלות מקום במסד הנתונים שלנו, אנו מחליטים שבמקום לאחסן את שם המשפחה המלא של אדם, יותר יעיל פשוט לאחסן את האותיות האחרונות שלו. לפיכך, עלינו לשנות את ה 'Last Name' עמודה בהתאם. עם למבדות, הניסיון שלנו לעשות זאת עשוי להיראות בערך כך:

names['Last Name'] = שמות['Last Name'].apply(lambda s: s[:1])
שמות
תמונה מאת המחבר

ברור שזה עובד, אבל זה קצת מגושם, ולכן לא פיתוני כפי שהוא יכול להיות. למרבה המזל, עם היופי של פונקציות מניפולציה של מחרוזות בפנדות, יש דרך אחרת, אלגנטית יותר (לצורך שורת הקוד הבאה, פשוט קדימה ותניח שעוד לא שינינו את 'Last Name' עמודה עם הקוד למעלה):

names['Last Name'] = שמות['Last Name'].str[:1]
שמות
תמונה מאת המחבר

טא-דה! ה .str המאפיין של סדרת Pandas מאפשר לנו לחבר כל מחרוזת בסדרה עם פעולת מחרוזת מוגדרת, ממש כאילו היינו עובדים עם כל מחרוזת בנפרד.

אבל רגע, זה משתפר. מאז .str מאפשר לנו לגשת ביעילות לפונקציונליות הרגילה של מחרוזת דרך הסדרה, אנחנו יכולים גם להחיל מגוון של פונקציות מחרוזות כדי לעזור לעבד את הנתונים שלנו במהירות! לדוגמה, נניח שאנו מחליטים להמיר את שתי העמודות לאותיות קטנות. הקוד הבא עושה את העבודה:

names['First Name'] = שמות['First Name'].str.lower()
names['Last Name'] = שמות['Last Name'].str.lower()
שמות
תמונה מאת המחבר

הרבה יותר פשוט מאשר לעבור את הטרחה של הגדרת פונקציות למבדה משלך ולקרוא לפונקציות המחרוזת שבתוכה. לא שאני לא אוהב למבדות - אבל לכל דבר יש את המקום שלו, והפשטות תמיד צריכה לקבל עדיפות בפייתון.

כיסיתי כאן רק כמה דוגמאות, אבל אוסף גדול של פונקציות מחרוזת עומד לרשותך [1].

השתמש בהם בנדיבות. הם מצוינים.

מחשבות אחרונות וסיכום

להלן דף תרמית קטן לשינוי נתונים עבורך:

  1. סנן כאילו אתה מתכוון לזה. למד מה באמת קורה כדי שתדע מה אתה עושה.
  2. אוהב את הלמבדות שלך. הם יכולים לעזור לך לתפעל נתונים בדרכים מדהימות.
  3. פנדה אוהבת מחרוזות כמוך. יש הרבה פונקציונליות מובנית - אתה יכול גם להשתמש בה.

הנה עצה אחת אחרונה: אין דרך "נכונה" לסנן מערך נתונים. זה תלוי בנתונים העומדים לרשותך, כמו גם בבעיה הייחודית שאתה מחפש לפתור. עם זאת, בעוד שאין שיטה מוגדרת שאתה יכול לבצע בכל פעם, יש אוסף שימושי של כלים ששווה לעמוד לרשותך. במאמר זה דיברתי על שלושה מהם.

אני ממליץ לך לצאת ולמצוא עוד.

הפניות

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

טרנספורמציה של נתונים מאסטר בפנדות עם שלוש הטכניקות השימושיות הללו שפורסמו מחדש ממקור https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 דרך https://towardsdatascience.com/feed

<!–

->

בול זמן:

עוד מ יועצי בלוקצ'יין