Python Pandas - คู่มือฉบับย่อ

Pandas เป็น Python Library แบบโอเพนซอร์สที่มีเครื่องมือจัดการและวิเคราะห์ข้อมูลประสิทธิภาพสูงโดยใช้โครงสร้างข้อมูลที่มีประสิทธิภาพ ชื่อ Pandas มาจากคำว่า Panel Data - เศรษฐมิติจากข้อมูลหลายมิติ

ในปี 2008 นักพัฒนา Wes McKinney เริ่มพัฒนาแพนด้าเมื่อต้องการเครื่องมือที่ยืดหยุ่นและมีประสิทธิภาพสูงในการวิเคราะห์ข้อมูล

ก่อนหน้า Pandas Python ถูกใช้เป็นหลักในการรวบรวมและเตรียมข้อมูล มีส่วนช่วยในการวิเคราะห์ข้อมูลน้อยมาก นุ่นแก้ปัญหานี้ เมื่อใช้ Pandas เราสามารถทำตามขั้นตอนทั่วไปห้าขั้นตอนในการประมวลผลและวิเคราะห์ข้อมูลโดยไม่คำนึงถึงแหล่งที่มาของข้อมูล - โหลดเตรียมจัดการสร้างแบบจำลองและวิเคราะห์

Python with Pandas ถูกนำไปใช้ในหลากหลายสาขารวมถึงโดเมนทางวิชาการและการค้ารวมถึงการเงินเศรษฐศาสตร์สถิติการวิเคราะห์ ฯลฯ

คุณสมบัติหลักของหมีแพนด้า

  • ออบเจ็กต์ DataFrame ที่รวดเร็วและมีประสิทธิภาพพร้อมการจัดทำดัชนีเริ่มต้นและกำหนดเอง
  • เครื่องมือสำหรับโหลดข้อมูลลงในออบเจ็กต์ข้อมูลในหน่วยความจำจากไฟล์รูปแบบต่างๆ
  • การจัดตำแหน่งข้อมูลและการจัดการข้อมูลที่ขาดหายไปในตัว
  • การปรับรูปแบบและการเปลี่ยนชุดวันที่
  • การแบ่งส่วนการจัดทำดัชนีและการย่อยชุดข้อมูลขนาดใหญ่ตามป้ายชื่อ
  • คอลัมน์จากโครงสร้างข้อมูลสามารถลบหรือแทรกได้
  • จัดกลุ่มตามข้อมูลสำหรับการรวมและการแปลง
  • การรวมและการรวมข้อมูลที่มีประสิทธิภาพสูง
  • ฟังก์ชันอนุกรมเวลา

การแจกจ่าย Python มาตรฐานไม่ได้มาพร้อมกับโมดูล Pandas ทางเลือกที่มีน้ำหนักเบาคือการติดตั้ง NumPy โดยใช้โปรแกรมติดตั้งแพ็คเกจ Python ยอดนิยมpip.

pip install pandas

หากคุณติดตั้งแพ็คเกจ Anaconda Python Pandas จะถูกติดตั้งตามค่าเริ่มต้นดังต่อไปนี้ -

Windows

  • Anaconda (จาก https://www.continuum.io) เป็นการแจกจ่าย Python ฟรีสำหรับ SciPy stack นอกจากนี้ยังสามารถใช้ได้กับ Linux และ Mac

  • Canopy (https://www.enthought.com/products/canopy/) มีให้บริการฟรีเช่นเดียวกับการจัดจำหน่ายเชิงพาณิชย์ด้วย SciPy stack สำหรับ Windows, Linux และ Mac

  • Python(x, y) เป็นการแจกจ่าย Python ฟรีด้วย SciPy stack และ Spyder IDE สำหรับ Windows OS (ดาวน์โหลดได้จากhttp://python-xy.github.io/)

ลินุกซ์

ตัวจัดการแพ็กเกจของลินุกซ์ดิสทริบิวชันที่เกี่ยวข้องใช้เพื่อติดตั้งแพ็กเกจหนึ่งแพ็กเกจหรือมากกว่าในสแตก SciPy

For Ubuntu Users

sudo apt-get install python-numpy python-scipy python-matplotlibipythonipythonnotebook
python-pandas python-sympy python-nose

For Fedora Users

sudo yum install numpyscipy python-matplotlibipython python-pandas sympy
python-nose atlas-devel

แพนด้าเกี่ยวข้องกับโครงสร้างข้อมูลสามประการต่อไปนี้ -

  • Series
  • DataFrame
  • Panel

โครงสร้างข้อมูลเหล่านี้สร้างขึ้นบน Numpy array ซึ่งหมายความว่ารวดเร็ว

มิติข้อมูลและคำอธิบาย

วิธีที่ดีที่สุดในการคิดโครงสร้างข้อมูลเหล่านี้คือโครงสร้างข้อมูลมิติที่สูงกว่าเป็นที่เก็บโครงสร้างข้อมูลมิติที่ต่ำกว่า ตัวอย่างเช่น DataFrame เป็นคอนเทนเนอร์ของซีรี่ส์แผงเป็นคอนเทนเนอร์ของ DataFrame

โครงสร้างข้อมูล ขนาด คำอธิบาย
ชุด 1 1D ติดป้ายกำกับอาร์เรย์ที่เป็นเนื้อเดียวกันขนาดเปลี่ยนไม่ได้
เฟรมข้อมูล 2 โครงสร้างแบบตารางที่มีป้ายกำกับ 2 มิติโดยทั่วไปซึ่งมีขนาดไม่แน่นอนโดยมีคอลัมน์ที่พิมพ์ไม่เหมือนกัน
แผงหน้าปัด 3 อาร์เรย์ที่มีป้ายกำกับ 3 มิติโดยทั่วไปซึ่งมีขนาดไม่แน่นอน

การสร้างและจัดการอาร์เรย์มิติตั้งแต่สองมิติขึ้นไปเป็นงานที่น่าเบื่อภาระจะถูกวางไว้กับผู้ใช้ในการพิจารณาการวางแนวของชุดข้อมูลเมื่อเขียนฟังก์ชัน แต่การใช้โครงสร้างข้อมูลของ Pandas ทำให้ความพยายามทางจิตใจของผู้ใช้ลดลง

ตัวอย่างเช่นเมื่อใช้ข้อมูลแบบตาราง (DataFrame) การคิดถึงไฟล์ index (แถว) และ columns แทนที่จะเป็นแกน 0 และแกน 1

ความไม่แน่นอน

โครงสร้างข้อมูล Pandas ทั้งหมดเป็นค่าที่ไม่แน่นอน (สามารถเปลี่ยนแปลงได้) และยกเว้น Series ทั้งหมดจะเปลี่ยนแปลงขนาดได้ ซีรีส์มีขนาดไม่เปลี่ยนรูป

Note- DataFrame ใช้กันอย่างแพร่หลายและเป็นโครงสร้างข้อมูลที่สำคัญที่สุดอย่างหนึ่ง แผงถูกใช้น้อยกว่ามาก

ชุด

ซีรี่ส์เป็นโครงสร้างแบบอาร์เรย์หนึ่งมิติที่มีข้อมูลที่เป็นเนื้อเดียวกัน ตัวอย่างเช่นชุดต่อไปนี้เป็นชุดจำนวนเต็ม 10, 23, 56, ...

10 23 56 17 52 61 73 90 26 72

ประเด็นสำคัญ

  • ข้อมูลที่เป็นเนื้อเดียวกัน
  • ขนาดไม่เปลี่ยนรูป
  • ค่าของข้อมูลที่เปลี่ยนแปลงได้

DataFrame

DataFrame คืออาร์เรย์สองมิติที่มีข้อมูลต่างกัน ตัวอย่างเช่น,

ชื่อ อายุ เพศ คะแนน
สตีฟ 32 ชาย 3.45
เลีย 28 หญิง 4.6
Vin 45 ชาย 3.9
เคธี่ 38 หญิง 2.78

ตารางแสดงข้อมูลของทีมขายขององค์กรพร้อมคะแนนประสิทธิภาพโดยรวม ข้อมูลจะแสดงเป็นแถวและคอลัมน์ แต่ละคอลัมน์แสดงถึงแอตทริบิวต์และแต่ละแถวแสดงถึงบุคคล

ประเภทข้อมูลของคอลัมน์

ประเภทข้อมูลของสี่คอลัมน์มีดังนี้ -

คอลัมน์ ประเภท
ชื่อ สตริง
อายุ จำนวนเต็ม
เพศ สตริง
คะแนน ลอย

ประเด็นสำคัญ

  • ข้อมูลที่แตกต่างกัน
  • ขนาดไม่แน่นอน
  • ข้อมูลไม่แน่นอน

แผงหน้าปัด

พาเนลเป็นโครงสร้างข้อมูลสามมิติที่มีข้อมูลต่างกัน เป็นการยากที่จะแสดงแผงในการแสดงภาพกราฟิก แต่แผงสามารถแสดงเป็นคอนเทนเนอร์ของ DataFrame

ประเด็นสำคัญ

  • ข้อมูลที่แตกต่างกัน
  • ขนาดไม่แน่นอน
  • ข้อมูลไม่แน่นอน

ซีรี่ส์คืออาร์เรย์ที่มีป้ายกำกับมิติเดียวที่สามารถเก็บข้อมูลประเภทใดก็ได้ (จำนวนเต็มสตริงโฟลทอ็อบเจกต์ไพ ธ อน ฯลฯ ) ป้ายชื่อแกนเรียกรวมกันว่าดัชนี

หมีแพนด้าชุด

สามารถสร้างชุดหมีแพนด้าได้โดยใช้ตัวสร้างต่อไปนี้ -

pandas.Series( data, index, dtype, copy)

พารามิเตอร์ของตัวสร้างมีดังนี้ -

ซีเนียร์ No พารามิเตอร์และคำอธิบาย
1

data

ข้อมูลอยู่ในรูปแบบต่างๆเช่น ndarray รายการค่าคงที่

2

index

ค่าดัชนีต้องไม่ซ้ำกันและมีความยาวเท่ากับข้อมูล ค่าเริ่มต้นnp.arange(n) หากไม่มีการส่งดัชนี

3

dtype

dtype สำหรับชนิดข้อมูล หากไม่มีประเภทข้อมูลจะถูกอนุมาน

4

copy

คัดลอกข้อมูล ค่าเริ่มต้นเท็จ

สามารถสร้างซีรีส์ได้โดยใช้อินพุตต่างๆเช่น -

  • Array
  • Dict
  • ค่าสเกลาร์หรือค่าคงที่

สร้างซีรี่ส์ว่างเปล่า

ซีรี่ส์พื้นฐานซึ่งสามารถสร้างได้คือซีรี่ส์ว่างเปล่า

ตัวอย่าง

#import the pandas library and aliasing as pd
import pandas as pd
s = pd.Series()
print s

มัน output มีดังนี้ -

Series([], dtype: float64)

สร้างซีรี่ส์จาก ndarray

หากข้อมูลเป็น ndarray ดัชนีที่ส่งผ่านจะต้องมีความยาวเท่ากัน หากไม่มีการส่งดัชนีดัชนีเริ่มต้นจะเป็นrange(n) ที่ไหน n คือความยาวอาร์เรย์เช่น [0,1,2,3 …. range(len(array))-1].

ตัวอย่าง 1

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data)
print s

มัน output มีดังนี้ -

0   a
1   b
2   c
3   d
dtype: object

เราไม่ได้ผ่านดัชนีใด ๆ ดังนั้นโดยค่าเริ่มต้นจะกำหนดดัชนีตั้งแต่ 0 ถึง len(data)-1เช่น 0 ถึง 3

ตัวอย่าง 2

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data,index=[100,101,102,103])
print s

มัน output มีดังนี้ -

100  a
101  b
102  c
103  d
dtype: object

เราส่งค่าดัชนีที่นี่ ตอนนี้เราสามารถดูค่าดัชนีที่กำหนดเองได้ในผลลัพธ์

สร้างซีรี่ส์จาก dict

dictสามารถส่งผ่านเป็นอินพุตและหากไม่มีการระบุดัชนีคีย์พจนานุกรมจะถูกนำมาเรียงตามลำดับเพื่อสร้างดัชนี ถ้าindex ถูกส่งผ่านค่าในข้อมูลที่สอดคล้องกับป้ายกำกับในดัชนีจะถูกดึงออกมา

ตัวอย่าง 1

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data)
print s

มัน output มีดังนี้ -

a 0.0
b 1.0
c 2.0
dtype: float64

Observe - ปุ่มพจนานุกรมใช้ในการสร้างดัชนี

ตัวอย่าง 2

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
print s

มัน output มีดังนี้ -

b 1.0
c 2.0
d NaN
a 0.0
dtype: float64

Observe - ลำดับดัชนียังคงอยู่และองค์ประกอบที่ขาดหายไปจะเต็มไปด้วย NaN (ไม่ใช่ตัวเลข)

สร้างซีรี่ส์จาก Scalar

หากข้อมูลเป็นค่าสเกลาร์ต้องจัดเตรียมดัชนี ค่าจะถูกทำซ้ำเพื่อให้ตรงกับความยาวของindex

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
s = pd.Series(5, index=[0, 1, 2, 3])
print s

มัน output มีดังนี้ -

0  5
1  5
2  5
3  5
dtype: int64

การเข้าถึงข้อมูลจากซีรี่ส์ที่มีตำแหน่ง

ข้อมูลในชุดข้อมูลสามารถเข้าถึงได้คล้ายกับในไฟล์ ndarray.

ตัวอย่าง 1

ดึงข้อมูลองค์ประกอบแรก ในฐานะที่เรารู้อยู่แล้วว่านับเริ่มต้นจากศูนย์สำหรับอาร์เรย์ซึ่งหมายความว่าองค์ประกอบแรกจะถูกเก็บไว้ที่ศูนย์THตำแหน่งและอื่น ๆ

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve the first element
print s[0]

มัน output มีดังนี้ -

1

ตัวอย่าง 2

ดึงข้อมูลสามองค์ประกอบแรกในซีรี่ส์ หากใส่ a: ไว้ด้านหน้ารายการทั้งหมดจากดัชนีนั้นเป็นต้นไปจะถูกแยกออก หากใช้พารามิเตอร์สองตัว (ด้วย: ระหว่างค่าเหล่านี้) รายการระหว่างดัชนีทั้งสอง (ไม่รวมดัชนีหยุด)

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve the first three element
print s[:3]

มัน output มีดังนี้ -

a  1
b  2
c  3
dtype: int64

ตัวอย่างที่ 3

ดึงข้อมูลสามองค์ประกอบสุดท้าย

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve the last three element
print s[-3:]

มัน output มีดังนี้ -

c  3
d  4
e  5
dtype: int64

ดึงข้อมูลโดยใช้ฉลาก (ดัชนี)

ซีรี่ส์เป็นเหมือนขนาดคงที่ dict ซึ่งคุณสามารถรับและกำหนดค่าตามป้ายดัชนี

ตัวอย่าง 1

ดึงข้อมูลองค์ประกอบเดียวโดยใช้ค่าป้ายชื่อดัชนี

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve a single element
print s['a']

มัน output มีดังนี้ -

1

ตัวอย่าง 2

ดึงข้อมูลหลายองค์ประกอบโดยใช้รายการค่าป้ายดัชนี

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve multiple elements
print s[['a','c','d']]

มัน output มีดังนี้ -

a  1
c  3
d  4
dtype: int64

ตัวอย่างที่ 3

หากไม่มีฉลากจะมีการเพิ่มข้อยกเว้น

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve multiple elements
print s['f']

มัน output มีดังนี้ -

…
KeyError: 'f'

กรอบข้อมูลเป็นโครงสร้างข้อมูลสองมิติกล่าวคือข้อมูลจะถูกจัดวางในรูปแบบตารางในแถวและคอลัมน์

คุณสมบัติของ DataFrame

  • คอลัมน์อาจมีหลายประเภท
  • ขนาด - เปลี่ยนแปลงได้
  • แกนที่มีป้ายกำกับ (แถวและคอลัมน์)
  • สามารถดำเนินการทางคณิตศาสตร์ในแถวและคอลัมน์

โครงสร้าง

สมมติว่าเรากำลังสร้าง data frame ที่มีข้อมูลของนักเรียน

คุณสามารถคิดว่ามันเป็นตาราง SQL หรือการแสดงข้อมูลสเปรดชีต

แพนด้า. ดาต้าเฟรม

แพนด้า DataFrame สามารถสร้างได้โดยใช้ตัวสร้างต่อไปนี้ -

pandas.DataFrame( data, index, columns, dtype, copy)

พารามิเตอร์ของตัวสร้างมีดังนี้ -

ซีเนียร์ No พารามิเตอร์และคำอธิบาย
1

data

ข้อมูลอยู่ในรูปแบบต่างๆเช่น ndarray, series, map, list, dict, ค่าคงที่และ DataFrame อื่น

2

index

สำหรับป้ายชื่อแถวดัชนีที่จะใช้สำหรับเฟรมผลลัพธ์คือตัวเลือกค่าเริ่มต้น np.arange (n) หากไม่มีการส่งดัชนี

3

columns

สำหรับป้ายชื่อคอลัมน์ไวยากรณ์เริ่มต้นที่เป็นทางเลือกคือ - np.arange (n) นี่จะเป็นจริงหากไม่มีการส่งผ่านดัชนี

4

dtype

ชนิดข้อมูลของแต่ละคอลัมน์

5

copy

คำสั่งนี้ (หรืออะไรก็ได้) ใช้สำหรับการคัดลอกข้อมูลหากค่าดีฟอลต์คือ False

สร้าง DataFrame

แพนด้า DataFrame สามารถสร้างได้โดยใช้อินพุตต่างๆเช่น -

  • Lists
  • dict
  • Series
  • Numpy ndarrays
  • DataFrame อื่น

ในส่วนต่อไปของบทนี้เราจะดูวิธีสร้าง DataFrame โดยใช้อินพุตเหล่านี้

สร้าง DataFrame ที่ว่างเปล่า

DataFrame พื้นฐานซึ่งสามารถสร้างได้คือ Dataframe ที่ว่างเปล่า

ตัวอย่าง

#import the pandas library and aliasing as pd
import pandas as pd
df = pd.DataFrame()
print df

มัน output มีดังนี้ -

Empty DataFrame
Columns: []
Index: []

สร้าง DataFrame จาก Lists

DataFrame สามารถสร้างได้โดยใช้รายการเดียวหรือรายการของรายการ

ตัวอย่าง 1

import pandas as pd
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print df

มัน output มีดังนี้ -

0
0    1
1    2
2    3
3    4
4    5

ตัวอย่าง 2

import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
print df

มัน output มีดังนี้ -

Name      Age
0     Alex      10
1     Bob       12
2     Clarke    13

ตัวอย่างที่ 3

import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)
print df

มัน output มีดังนี้ -

Name     Age
0     Alex     10.0
1     Bob      12.0
2     Clarke   13.0

Note - สังเกต dtype พารามิเตอร์เปลี่ยนประเภทของคอลัมน์อายุเป็นทศนิยม

สร้าง DataFrame จาก Dict of ndarrays / Lists

ทั้งหมด ndarraysต้องมีความยาวเท่ากัน หากดัชนีถูกส่งผ่านความยาวของดัชนีควรเท่ากับความยาวของอาร์เรย์

หากไม่มีการส่งดัชนีโดยค่าเริ่มต้นดัชนีจะเป็นช่วง (n) โดยที่ n คือความยาวอาร์เรย์

ตัวอย่าง 1

import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print df

มัน output มีดังนี้ -

Age      Name
0     28        Tom
1     34       Jack
2     29      Steve
3     42      Ricky

Note- สังเกตค่า 0,1,2,3 เป็นดัชนีเริ่มต้นที่กำหนดให้กับแต่ละรายการโดยใช้ช่วงฟังก์ชัน (n)

ตัวอย่าง 2

ตอนนี้ให้เราสร้าง DataFrame ที่จัดทำดัชนีโดยใช้อาร์เรย์

import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
print df

มัน output มีดังนี้ -

Age    Name
rank1    28      Tom
rank2    34     Jack
rank3    29    Steve
rank4    42    Ricky

Note - สังเกต index พารามิเตอร์กำหนดดัชนีให้กับแต่ละแถว

สร้าง DataFrame จาก List of Dicts

รายการพจนานุกรมสามารถส่งผ่านเป็นข้อมูลอินพุตเพื่อสร้าง DataFrame โดยค่าเริ่มต้นคีย์พจนานุกรมจะใช้เป็นชื่อคอลัมน์

ตัวอย่าง 1

ตัวอย่างต่อไปนี้แสดงวิธีสร้าง DataFrame โดยส่งผ่านรายการพจนานุกรม

import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print df

มัน output มีดังนี้ -

a    b      c
0   1   2     NaN
1   5   10   20.0

Note - สังเกต NaN (ไม่ใช่ตัวเลข) จะถูกต่อท้ายในพื้นที่ที่ขาดหายไป

ตัวอย่าง 2

ตัวอย่างต่อไปนี้แสดงวิธีสร้าง DataFrame โดยส่งผ่านรายการพจนานุกรมและดัชนีแถว

import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print df

มัน output มีดังนี้ -

a   b       c
first   1   2     NaN
second  5   10   20.0

ตัวอย่างที่ 3

ตัวอย่างต่อไปนี้แสดงวิธีสร้าง DataFrame โดยมีรายการพจนานุกรมดัชนีแถวและดัชนีคอลัมน์

import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]

#With two column indices, values same as dictionary keys
df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b'])

#With two column indices with one index with other name
df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1'])
print df1
print df2

มัน output มีดังนี้ -

#df1 output
         a  b
first    1  2
second   5  10

#df2 output
         a  b1
first    1  NaN
second   5  NaN

Note- สังเกต df2 DataFrame ถูกสร้างขึ้นด้วยดัชนีคอลัมน์อื่นที่ไม่ใช่คีย์พจนานุกรม ดังนั้นจึงต่อท้าย NaN เข้าที่ ในขณะที่ df1 ถูกสร้างขึ้นด้วยดัชนีคอลัมน์เหมือนกับคีย์พจนานุกรมดังนั้นจึงมีการต่อท้ายของ NaN

สร้าง DataFrame จาก Dict of Series

สามารถส่งผ่าน Dictionary of Series เพื่อสร้าง DataFrame ได้ ดัชนีผลลัพธ์คือการรวมกันของดัชนีชุดข้อมูลทั้งหมดที่ส่งผ่าน

ตัวอย่าง

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df

มัน output มีดังนี้ -

one    two
a     1.0    1
b     2.0    2
c     3.0    3
d     NaN    4

Note - สังเกตสำหรับซีรีส์ที่หนึ่งไม่มีป้ายกำกับ ‘d’ ผ่านไป แต่ในผลลัพธ์สำหรับ d ป้ายกำกับ NaN ต่อท้ายด้วย NaN

ตอนนี้ให้เราเข้าใจ column selection, additionและ deletion ผ่านตัวอย่าง

การเลือกคอลัมน์

เราจะเข้าใจสิ่งนี้โดยการเลือกคอลัมน์จาก DataFrame

ตัวอย่าง

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df ['one']

มัน output มีดังนี้ -

a     1.0
b     2.0
c     3.0
d     NaN
Name: one, dtype: float64

การเพิ่มคอลัมน์

เราจะเข้าใจสิ่งนี้โดยการเพิ่มคอลัมน์ใหม่ในกรอบข้อมูลที่มีอยู่

ตัวอย่าง

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)

# Adding a new column to an existing DataFrame object with column label by passing new series

print ("Adding a new column by passing as Series:")
df['three']=pd.Series([10,20,30],index=['a','b','c'])
print df

print ("Adding a new column using the existing columns in DataFrame:")
df['four']=df['one']+df['three']

print df

มัน output มีดังนี้ -

Adding a new column by passing as Series:
     one   two   three
a    1.0    1    10.0
b    2.0    2    20.0
c    3.0    3    30.0
d    NaN    4    NaN

Adding a new column using the existing columns in DataFrame:
      one   two   three    four
a     1.0    1    10.0     11.0
b     2.0    2    20.0     22.0
c     3.0    3    30.0     33.0
d     NaN    4     NaN     NaN

การลบคอลัมน์

คอลัมน์สามารถลบหรือโผล่ได้ ให้เราเป็นตัวอย่างเพื่อทำความเข้าใจว่า

ตัวอย่าง

# Using the previous DataFrame, we will delete a column
# using del function
import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']), 
   'three' : pd.Series([10,20,30], index=['a','b','c'])}

df = pd.DataFrame(d)
print ("Our dataframe is:")
print df

# using del function
print ("Deleting the first column using DEL function:")
del df['one']
print df

# using pop function
print ("Deleting another column using POP function:")
df.pop('two')
print df

มัน output มีดังนี้ -

Our dataframe is:
      one   three  two
a     1.0    10.0   1
b     2.0    20.0   2
c     3.0    30.0   3
d     NaN     NaN   4

Deleting the first column using DEL function:
      three    two
a     10.0     1
b     20.0     2
c     30.0     3
d     NaN      4

Deleting another column using POP function:
   three
a  10.0
b  20.0
c  30.0
d  NaN

การเลือกแถวการเพิ่มและการลบ

ตอนนี้เราจะเข้าใจการเลือกแถวการเพิ่มและการลบผ่านตัวอย่าง ให้เราเริ่มต้นด้วยแนวคิดของการเลือก

เลือกตามฉลาก

สามารถเลือกแถวได้โดยส่งป้ายชื่อแถวไปยังไฟล์ loc ฟังก์ชัน

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df.loc['b']

มัน output มีดังนี้ -

one 2.0
two 2.0
Name: b, dtype: float64

ผลลัพธ์คือชุดที่มีป้ายกำกับเป็นชื่อคอลัมน์ของ DataFrame และชื่อซีรีส์คือป้ายกำกับที่ดึงข้อมูลมา

การเลือกตามตำแหน่งจำนวนเต็ม

สามารถเลือกแถวได้โดยส่งตำแหน่งจำนวนเต็มไปยังไฟล์ iloc ฟังก์ชัน

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df.iloc[2]

มัน output มีดังนี้ -

one   3.0
two   3.0
Name: c, dtype: float64

Slice Rows

สามารถเลือกหลายแถวได้โดยใช้โอเปอเรเตอร์ ":"

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df[2:4]

มัน output มีดังนี้ -

one  two
c  3.0    3
d  NaN    4

การเพิ่มแถว

เพิ่มแถวใหม่ใน DataFrame โดยใช้ไฟล์ appendฟังก์ชัน ฟังก์ชันนี้จะต่อท้ายแถวในตอนท้าย

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])

df = df.append(df2)
print df

มัน output มีดังนี้ -

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

การลบแถว

ใช้ป้ายกำกับดัชนีเพื่อลบหรือวางแถวจาก DataFrame หากป้ายกำกับซ้ำกันหลายแถวจะถูกทิ้ง

หากคุณสังเกตในตัวอย่างข้างต้นป้ายกำกับจะซ้ำกัน ให้เราวางป้ายและดูว่าจะมีกี่แถว

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])

df = df.append(df2)

# Drop rows with label 0
df = df.drop(0)

print df

มัน output มีดังนี้ -

a b
1 3 4
1 7 8

ในตัวอย่างข้างต้นแถวสองแถวถูกทิ้งเนื่องจากทั้งสองแถวมีป้ายกำกับ 0 เหมือนกัน

panelเป็นที่เก็บข้อมูล 3 มิติ ระยะPanel data มาจากเศรษฐมิติและรับผิดชอบบางส่วนสำหรับแพนด้าชื่อ - pan(el)-da(ta)- ส.

ชื่อสำหรับ 3 แกนมีจุดมุ่งหมายเพื่อให้ความหมายเชิงความหมายบางประการในการอธิบายการดำเนินการที่เกี่ยวข้องกับข้อมูลพาเนล พวกเขาคือ -

  • items - แกน 0 แต่ละรายการสอดคล้องกับ DataFrame ที่อยู่ภายใน

  • major_axis - แกน 1 เป็นดัชนี (แถว) ของแต่ละ DataFrames

  • minor_axis - แกน 2 คือคอลัมน์ของแต่ละ DataFrames

แพนด้าแผง ()

แผงสามารถสร้างได้โดยใช้ตัวสร้างต่อไปนี้ -

pandas.Panel(data, items, major_axis, minor_axis, dtype, copy)

พารามิเตอร์ของตัวสร้างมีดังนี้ -

พารามิเตอร์ คำอธิบาย
ข้อมูล ข้อมูลอยู่ในรูปแบบต่างๆเช่น ndarray, series, map, list, dict, ค่าคงที่และ DataFrame อื่น
รายการ แกน = 0
major_axis แกน = 1
minor_axis แกน = 2
dtype ชนิดข้อมูลของแต่ละคอลัมน์
สำเนา คัดลอกข้อมูล ค่าเริ่มต้น,false

สร้างแผง

แผงสามารถสร้างได้หลายวิธีเช่น -

  • จาก ndarrays
  • จากคำสั่งของ DataFrames

จาก 3D ndarray

# creating an empty panel
import pandas as pd
import numpy as np

data = np.random.rand(2,4,5)
p = pd.Panel(data)
print p

มัน output มีดังนี้ -

<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 5 (minor_axis)
Items axis: 0 to 1
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 4

Note - สังเกตขนาดของแผงว่างและแผงด้านบนวัตถุทั้งหมดจะแตกต่างกัน

จากคำสั่งของ DataFrame Objects

#creating an empty panel
import pandas as pd
import numpy as np

data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p

มัน output มีดังนี้ -

Dimensions: 2 (items) x 4 (major_axis) x 3 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 2

สร้างแผงว่าง

แผงว่างสามารถสร้างได้โดยใช้ตัวสร้างแผงดังต่อไปนี้ -

#creating an empty panel
import pandas as pd
p = pd.Panel()
print p

มัน output มีดังนี้ -

<class 'pandas.core.panel.Panel'>
Dimensions: 0 (items) x 0 (major_axis) x 0 (minor_axis)
Items axis: None
Major_axis axis: None
Minor_axis axis: None

การเลือกข้อมูลจากแผงควบคุม

เลือกข้อมูลจากแผงควบคุมโดยใช้ -

  • Items
  • Major_axis
  • Minor_axis

การใช้รายการ

# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p['Item1']

มัน output มีดังนี้ -

0          1          2
0    0.488224  -0.128637   0.930817
1    0.417497   0.896681   0.576657
2   -2.775266   0.571668   0.290082
3   -0.400538  -0.144234   1.110535

เรามีสองรายการและเราเรียกค้น item1 ผลลัพธ์คือ DataFrame ที่มี 4 แถวและ 3 คอลัมน์ซึ่งเป็นไฟล์Major_axis และ Minor_axis มิติข้อมูล

ใช้ major_axis

ข้อมูลสามารถเข้าถึงได้โดยใช้วิธีการ panel.major_axis(index).

# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p.major_xs(1)

มัน output มีดังนี้ -

Item1       Item2
0   0.417497    0.748412
1   0.896681   -0.557322
2   0.576657       NaN

ใช้ minor_axis

ข้อมูลสามารถเข้าถึงได้โดยใช้วิธีการ panel.minor_axis(index).

# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p.minor_xs(1)

มัน output มีดังนี้ -

Item1       Item2
0   -0.128637   -1.047032
1    0.896681   -0.557322
2    0.571668    0.431953
3   -0.144234    1.302466

Note - สังเกตการเปลี่ยนแปลงของมิติข้อมูล

ตอนนี้เราได้เรียนรู้เกี่ยวกับโครงสร้างข้อมูลของ Pandas ทั้งสามและวิธีการสร้าง เราจะมุ่งเน้นไปที่ออบเจ็กต์ DataFrame เป็นหลักเนื่องจากความสำคัญในการประมวลผลข้อมูลแบบเรียลไทม์และยังกล่าวถึงโครงสร้างข้อมูลอื่น ๆ อีกเล็กน้อย

ฟังก์ชันพื้นฐานของซีรี่ส์

ซีเนียร์ คุณสมบัติหรือวิธีการและคำอธิบาย
1

axes

ส่งคืนรายการป้ายชื่อแกนแถว

2

dtype

ส่งคืน dtype ของวัตถุ

3

empty

ส่งกลับค่า True หากชุดข้อมูลว่างเปล่า

4

ndim

ส่งคืนจำนวนมิติของข้อมูลพื้นฐานตามคำจำกัดความ 1

5

size

ส่งคืนจำนวนองค์ประกอบในข้อมูลพื้นฐาน

6

values

ส่งคืน Series เป็น ndarray

7

head()

ส่งคืน n แถวแรก

8

tail()

ส่งคืน n แถวสุดท้าย

ตอนนี้ให้เราสร้างซีรี่ส์และดูการดำเนินการแอตทริบิวต์แบบแท็บด้านบนทั้งหมด

ตัวอย่าง

import pandas as pd
import numpy as np

#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print s

มัน output มีดังนี้ -

0   0.967853
1  -0.148368
2  -1.395906
3  -1.758394
dtype: float64

แกน

ส่งคืนรายการป้ายกำกับของซีรี่ส์

import pandas as pd
import numpy as np

#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print ("The axes are:")
print s.axes

มัน output มีดังนี้ -

The axes are:
[RangeIndex(start=0, stop=4, step=1)]

ผลลัพธ์ข้างต้นเป็นรูปแบบที่กะทัดรัดของรายการค่าตั้งแต่ 0 ถึง 5 นั่นคือ [0,1,2,3,4]

ว่างเปล่า

ส่งคืนค่าบูลีนโดยบอกว่าวัตถุว่างหรือไม่ True แสดงว่าวัตถุว่างเปล่า

import pandas as pd
import numpy as np

#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print ("Is the Object empty?")
print s.empty

มัน output มีดังนี้ -

Is the Object empty?
False

ndim

ส่งคืนจำนวนมิติของวัตถุ ตามความหมายซีรี่ส์คือโครงสร้างข้อมูล 1D ดังนั้นจึงส่งคืน

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print s

print ("The dimensions of the object:")
print s.ndim

มัน output มีดังนี้ -

0   0.175898
1   0.166197
2  -0.609712
3  -1.377000
dtype: float64

The dimensions of the object:
1

ขนาด

ส่งคืนขนาด (ความยาว) ของซีรีส์

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(2))
print s
print ("The size of the object:")
print s.size

มัน output มีดังนี้ -

0   3.078058
1  -1.207803
dtype: float64

The size of the object:
2

ค่า

ส่งคืนข้อมูลจริงในชุดข้อมูลเป็นอาร์เรย์

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print s

print ("The actual data series is:")
print s.values

มัน output มีดังนี้ -

0   1.787373
1  -0.605159
2   0.180477
3  -0.140922
dtype: float64

The actual data series is:
[ 1.78737302 -0.60515881 0.18047664 -0.1409218 ]

หัวและหาง

หากต้องการดูตัวอย่างขนาดเล็กของ Series หรือออบเจ็กต์ DataFrame ให้ใช้เมธอด head () และ tail ()

head() คืนค่าแรก nแถว (สังเกตค่าดัชนี) จำนวนองค์ประกอบเริ่มต้นที่จะแสดงคือห้า แต่คุณอาจส่งตัวเลขที่กำหนดเองได้

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print ("The original series is:")
print s

print ("The first two rows of the data series:")
print s.head(2)

มัน output มีดังนี้ -

The original series is:
0   0.720876
1  -0.765898
2   0.479221
3  -0.139547
dtype: float64

The first two rows of the data series:
0   0.720876
1  -0.765898
dtype: float64

tail() ส่งคืนไฟล์ nแถว (สังเกตค่าดัชนี) จำนวนองค์ประกอบเริ่มต้นที่จะแสดงคือห้า แต่คุณอาจส่งตัวเลขที่กำหนดเองได้

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print ("The original series is:")
print s

print ("The last two rows of the data series:")
print s.tail(2)

มัน output มีดังนี้ -

The original series is:
0 -0.655091
1 -0.881407
2 -0.608592
3 -2.341413
dtype: float64

The last two rows of the data series:
2 -0.608592
3 -2.341413
dtype: float64

ฟังก์ชันพื้นฐานของ DataFrame

ตอนนี้ให้เราเข้าใจว่า DataFrame Basic Functionality คืออะไร ตารางต่อไปนี้แสดงรายการแอตทริบิวต์หรือวิธีการที่สำคัญที่ช่วยใน DataFrame Basic Functionality

ซีเนียร์ คุณสมบัติหรือวิธีการและคำอธิบาย
1

T

เปลี่ยนแถวและคอลัมน์

2

axes

ส่งคืนรายการที่มีป้ายชื่อแกนแถวและป้ายชื่อแกนคอลัมน์เป็นสมาชิกเท่านั้น

3

dtypes

ส่งคืน dtypes ในวัตถุนี้

4

empty

เป็นจริงถ้า NDFrame ว่างเปล่าทั้งหมด [ไม่มีรายการ]; ถ้าแกนใดมีความยาว 0

5

ndim

จำนวนแกน / ขนาดอาร์เรย์

6

shape

ส่งคืนทูเพิลที่แสดงถึงมิติข้อมูลของ DataFrame

7

size

จำนวนองค์ประกอบใน NDFrame

8

values

การแสดง Numpy ของ NDFrame

9

head()

ส่งคืน n แถวแรก

10

tail()

ส่งคืน n แถวสุดท้าย

ตอนนี้ให้เราสร้าง DataFrame และดูว่าแอตทริบิวต์ที่กล่าวถึงข้างต้นทำงานอย่างไร

ตัวอย่าง

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data series is:")
print df

มัน output มีดังนี้ -

Our data series is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

T (เปลี่ยน)

ส่งคืนทรานสโพสของ DataFrame แถวและคอลัมน์จะสลับกัน

import pandas as pd
import numpy as np
 
# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

# Create a DataFrame
df = pd.DataFrame(d)
print ("The transpose of the data series is:")
print df.T

มัน output มีดังนี้ -

The transpose of the data series is:
         0     1       2      3      4      5       6
Age      25    26      25     23     30     29      23
Name     Tom   James   Ricky  Vin    Steve  Smith   Jack
Rating   4.23  3.24    3.98   2.56   3.2    4.6     3.8

แกน

ส่งคืนรายการป้ายชื่อแกนแถวและป้ายชื่อแกนคอลัมน์

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Row axis labels and column axis labels are:")
print df.axes

มัน output มีดังนี้ -

Row axis labels and column axis labels are:

[RangeIndex(start=0, stop=7, step=1), Index([u'Age', u'Name', u'Rating'],
dtype='object')]

dtypes

ส่งคืนชนิดข้อมูลของแต่ละคอลัมน์

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("The data types of each column are:")
print df.dtypes

มัน output มีดังนี้ -

The data types of each column are:
Age     int64
Name    object
Rating  float64
dtype: object

ว่างเปล่า

ส่งคืนค่าบูลีนโดยบอกว่าวัตถุว่างหรือไม่ True แสดงว่าวัตถุว่างเปล่า

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Is the object empty?")
print df.empty

มัน output มีดังนี้ -

Is the object empty?
False

ndim

ส่งคืนจำนวนมิติของวัตถุ ตามความหมาย DataFrame คือวัตถุ 2 มิติ

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The dimension of the object is:")
print df.ndim

มัน output มีดังนี้ -

Our object is:
      Age    Name     Rating
0     25     Tom      4.23
1     26     James    3.24
2     25     Ricky    3.98
3     23     Vin      2.56
4     30     Steve    3.20
5     29     Smith    4.60
6     23     Jack     3.80

The dimension of the object is:
2

รูปร่าง

ส่งคืนทูเพิลที่แสดงถึงมิติข้อมูลของ DataFrame ทูเพิล (a, b) โดยที่ a แทนจำนวนแถวและb แสดงถึงจำนวนคอลัมน์

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The shape of the object is:")
print df.shape

มัน output มีดังนี้ -

Our object is:
   Age   Name    Rating
0  25    Tom     4.23
1  26    James   3.24
2  25    Ricky   3.98
3  23    Vin     2.56
4  30    Steve   3.20
5  29    Smith   4.60
6  23    Jack    3.80

The shape of the object is:
(7, 3)

ขนาด

ส่งคืนจำนวนองค์ประกอบใน DataFrame

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The total number of elements in our object is:")
print df.size

มัน output มีดังนี้ -

Our object is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

The total number of elements in our object is:
21

ค่า

ส่งคืนข้อมูลจริงใน DataFrame เป็นไฟล์ NDarray.

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The actual data in our data frame is:")
print df.values

มัน output มีดังนี้ -

Our object is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80
The actual data in our data frame is:
[[25 'Tom' 4.23]
[26 'James' 3.24]
[25 'Ricky' 3.98]
[23 'Vin' 2.56]
[30 'Steve' 3.2]
[29 'Smith' 4.6]
[23 'Jack' 3.8]]

หัวและหาง

หากต้องการดูตัวอย่างขนาดเล็กของออบเจ็กต์ DataFrame ให้ใช้ไฟล์ head() และหาง () วิธีการ head() คืนค่าแรก nแถว (สังเกตค่าดัชนี) จำนวนองค์ประกอบเริ่มต้นที่จะแสดงคือห้า แต่คุณอาจส่งตัวเลขที่กำหนดเองได้

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data frame is:")
print df
print ("The first two rows of the data frame is:")
print df.head(2)

มัน output มีดังนี้ -

Our data frame is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

The first two rows of the data frame is:
   Age   Name   Rating
0  25    Tom    4.23
1  26    James  3.24

tail() ส่งคืนไฟล์ nแถว (สังเกตค่าดัชนี) จำนวนองค์ประกอบเริ่มต้นที่จะแสดงคือห้า แต่คุณอาจส่งตัวเลขที่กำหนดเองได้

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]), 
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data frame is:")
print df
print ("The last two rows of the data frame is:")
print df.tail(2)

มัน output มีดังนี้ -

Our data frame is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

The last two rows of the data frame is:
    Age   Name    Rating
5   29    Smith    4.6
6   23    Jack     3.8

วิธีการจำนวนมากโดยรวมรวบรวมสถิติเชิงพรรณนาและการดำเนินการอื่น ๆ ที่เกี่ยวข้องบน DataFrame สิ่งเหล่านี้ส่วนใหญ่เป็นการรวมตัวเช่นsum(), mean(), แต่บางส่วนเช่น sumsum()ผลิตวัตถุที่มีขนาดเท่ากัน โดยทั่วไปวิธีการเหล่านี้ใช้เวลาaxisอาร์กิวเมนต์เช่นเดียวกับndarray {sum, std, ... }แต่แกนสามารถระบุได้ด้วยชื่อหรือจำนวนเต็ม

  • DataFrame - "ดัชนี" (แกน = 0, ค่าเริ่มต้น), "คอลัมน์" (แกน = 1)

ให้เราสร้าง DataFrame และใช้วัตถุนี้ตลอดบทนี้สำหรับการดำเนินการทั้งหมด

ตัวอย่าง

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df

มัน output มีดังนี้ -

Age  Name   Rating
0   25   Tom     4.23
1   26   James   3.24
2   25   Ricky   3.98
3   23   Vin     2.56
4   30   Steve   3.20
5   29   Smith   4.60
6   23   Jack    3.80
7   34   Lee     3.78
8   40   David   2.98
9   30   Gasper  4.80
10  51   Betina  4.10
11  46   Andres  3.65

ผลรวม ()

ส่งคืนผลรวมของค่าสำหรับแกนที่ร้องขอ ตามค่าเริ่มต้นแกนคือดัชนี (แกน = 0)

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.sum()

มัน output มีดังนี้ -

Age                                                    382
Name     TomJamesRickyVinSteveSmithJackLeeDavidGasperBe...
Rating                                               44.92
dtype: object

แต่ละคอลัมน์จะถูกเพิ่มทีละคอลัมน์ (ต่อท้ายสตริง)

แกน = 1

ไวยากรณ์นี้จะให้ผลลัพธ์ดังที่แสดงด้านล่าง

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
 
#Create a DataFrame
df = pd.DataFrame(d)
print df.sum(1)

มัน output มีดังนี้ -

0    29.23
1    29.24
2    28.98
3    25.56
4    33.20
5    33.60
6    26.80
7    37.78
8    42.98
9    34.80
10   55.10
11   49.65
dtype: float64

ค่าเฉลี่ย ()

ส่งกลับค่าเฉลี่ย

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.mean()

มัน output มีดังนี้ -

Age       31.833333
Rating     3.743333
dtype: float64

มาตรฐาน ()

ส่งกลับค่าเบี่ยงเบนมาตรฐาน Bressel ของคอลัมน์ตัวเลข

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.std()

มัน output มีดังนี้ -

Age       9.232682
Rating    0.661628
dtype: float64

ฟังก์ชั่นและคำอธิบาย

ตอนนี้ให้เราเข้าใจฟังก์ชั่นภายใต้สถิติเชิงพรรณนาใน Python Pandas ตารางต่อไปนี้แสดงรายการฟังก์ชันที่สำคัญ -

ซีเนียร์ ฟังก์ชัน คำอธิบาย
1 นับ() จำนวนการสังเกตที่ไม่เป็นค่าว่าง
2 ผลรวม () ผลรวมของค่า
3 ค่าเฉลี่ย () ค่าเฉลี่ยของค่า
4 ค่ามัธยฐาน () ค่ามัธยฐานของค่า
5 โหมด() โหมดของค่า
6 มาตรฐาน () ค่าเบี่ยงเบนมาตรฐานของค่า
7 นาที() มูลค่าขั้นต่ำ
8 สูงสุด () ค่าสูงสุด
9 เอบีเอส () ค่าสัมบูรณ์
10 แยง() ผลิตภัณฑ์แห่งคุณค่า
11 cumsum () ผลรวมสะสม
12 cumprod () สินค้าสะสม

Note- เนื่องจาก DataFrame เป็นโครงสร้างข้อมูลที่แตกต่างกัน การดำเนินการทั่วไปใช้ไม่ได้กับทุกฟังก์ชัน

  • ฟังก์ชั่นเช่น sum(), cumsum()ทำงานกับองค์ประกอบข้อมูลสตริงทั้งตัวเลขและอักขระ (หรือ) โดยไม่มีข้อผิดพลาดใด ๆ แม้ว่าn โดยทั่วไปจะไม่ใช้การรวมอักขระโดยทั่วไปฟังก์ชันเหล่านี้จะไม่ทำให้เกิดข้อยกเว้นใด ๆ

  • ฟังก์ชั่นเช่น abs(), cumprod() โยนข้อยกเว้นเมื่อ DataFrame มีข้อมูลอักขระหรือสตริงเนื่องจากไม่สามารถดำเนินการดังกล่าวได้

การสรุปข้อมูล

describe() ฟังก์ชันคำนวณสรุปสถิติที่เกี่ยวข้องกับคอลัมน์ DataFrame

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.describe()

มัน output มีดังนี้ -

Age         Rating
count    12.000000      12.000000
mean     31.833333       3.743333
std       9.232682       0.661628
min      23.000000       2.560000
25%      25.000000       3.230000
50%      29.500000       3.790000
75%      35.500000       4.132500
max      51.000000       4.800000

ฟังก์ชันนี้ให้ไฟล์ mean, std และ IQRค่า และฟังก์ชันจะไม่รวมคอลัมน์อักขระและให้สรุปเกี่ยวกับคอลัมน์ตัวเลข'include'คืออาร์กิวเมนต์ที่ใช้ในการส่งผ่านข้อมูลที่จำเป็นเกี่ยวกับคอลัมน์ที่ต้องพิจารณาเพื่อสรุป รับรายการค่า โดยค่าเริ่มต้นคือ "number"

  • object - สรุปคอลัมน์ String
  • number - สรุปคอลัมน์ตัวเลข
  • all - สรุปคอลัมน์ทั้งหมดเข้าด้วยกัน (ไม่ควรส่งเป็นค่ารายการ)

ตอนนี้ใช้คำสั่งต่อไปนี้ในโปรแกรมและตรวจสอบผลลัพธ์ -

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.describe(include=['object'])

มัน output มีดังนี้ -

Name
count       12
unique      12
top      Ricky
freq         1

ตอนนี้ใช้คำสั่งต่อไปนี้และตรวจสอบผลลัพธ์ -

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df. describe(include='all')

มัน output มีดังนี้ -

Age          Name       Rating
count   12.000000        12    12.000000
unique        NaN        12          NaN
top           NaN     Ricky          NaN
freq          NaN         1          NaN
mean    31.833333       NaN     3.743333
std      9.232682       NaN     0.661628
min     23.000000       NaN     2.560000
25%     25.000000       NaN     3.230000
50%     29.500000       NaN     3.790000
75%     35.500000       NaN     4.132500
max     51.000000       NaN     4.800000

ในการใช้ฟังก์ชันของคุณเองหรือของไลบรารีอื่นกับอ็อบเจ็กต์ Pandas คุณควรทราบถึงสามวิธีที่สำคัญ วิธีการได้รับการกล่าวถึงด้านล่าง วิธีที่เหมาะสมในการใช้ขึ้นอยู่กับว่าฟังก์ชันของคุณคาดว่าจะทำงานบน DataFrame ทั้งแถวหรือคอลัมน์หรือองค์ประกอบที่ชาญฉลาด

  • แอปพลิเคชั่นฟังก์ชันตารางที่ชาญฉลาด: ท่อ ()
  • Row หรือ Column Wise Function Application: apply ()
  • แอปพลิเคชันฟังก์ชัน Element wise: applymap ()

แอปพลิเคชั่นฟังก์ชั่นที่ชาญฉลาด

การดำเนินการแบบกำหนดเองสามารถทำได้โดยส่งผ่านฟังก์ชันและจำนวนพารามิเตอร์ที่เหมาะสมเป็นอาร์กิวเมนต์ไปป์ ดังนั้นการดำเนินการจะดำเนินการกับ DataFrame ทั้งหมด

ตัวอย่างเช่นเพิ่มค่า 2 ให้กับองค์ประกอบทั้งหมดใน DataFrame จากนั้น

ฟังก์ชัน adder

ฟังก์ชัน adder จะเพิ่มค่าตัวเลขสองค่าเป็นพารามิเตอร์และส่งกลับผลรวม

def adder(ele1,ele2):
   return ele1+ele2

ตอนนี้เราจะใช้ฟังก์ชันที่กำหนดเองเพื่อดำเนินการกับ DataFrame

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)

มาดูโปรแกรมเต็ม -

import pandas as pd
import numpy as np

def adder(ele1,ele2):
   return ele1+ele2

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)
print df.apply(np.mean)

มัน output มีดังนี้ -

col1       col2       col3
0   2.176704   2.219691   1.509360
1   2.222378   2.422167   3.953921
2   2.241096   1.135424   2.696432
3   2.355763   0.376672   1.182570
4   2.308743   2.714767   2.130288

แอปพลิเคชันฟังก์ชัน Row หรือ Column Wise

สามารถใช้ฟังก์ชัน Arbitrary ตามแกนของ DataFrame หรือ Panel โดยใช้ไฟล์ apply()วิธีการซึ่งเช่นเดียวกับวิธีการสถิติเชิงพรรณนาใช้อาร์กิวเมนต์แกนที่เป็นทางเลือก ตามค่าเริ่มต้นการดำเนินการจะดำเนินการคอลัมน์อย่างชาญฉลาดโดยให้แต่ละคอลัมน์เป็นเหมือนอาร์เรย์

ตัวอย่าง 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean)
print df.apply(np.mean)

มัน output มีดังนี้ -

col1   -0.288022
col2    1.044839
col3   -0.187009
dtype: float64

โดยผ่าน axis พารามิเตอร์การดำเนินการสามารถดำเนินการแถวที่ชาญฉลาด

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean,axis=1)
print df.apply(np.mean)

มัน output มีดังนี้ -

col1    0.034093
col2   -0.152672
col3   -0.229728
dtype: float64

ตัวอย่างที่ 3

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(lambda x: x.max() - x.min())
print df.apply(np.mean)

มัน output มีดังนี้ -

col1   -0.167413
col2   -0.370495
col3   -0.707631
dtype: float64

แอปพลิเคชั่น Element Wise Function

ไม่ใช่ทุกฟังก์ชันที่สามารถเป็นเวกเตอร์ (อาร์เรย์ NumPy ที่ส่งคืนอาร์เรย์อื่นหรือค่าใด ๆ ) applymap() บน DataFrame และ analogously map() on Series ยอมรับฟังก์ชัน Python ที่รับค่าเดียวและส่งคืนค่าเดียว

ตัวอย่าง 1

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])

# My custom function
df['col1'].map(lambda x:x*100)
print df.apply(np.mean)

มัน output มีดังนี้ -

col1    0.480742
col2    0.454185
col3    0.266563
dtype: float64

ตัวอย่าง 2

import pandas as pd
import numpy as np

# My custom function
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.applymap(lambda x:x*100)
print df.apply(np.mean)

มัน output มีดังนี้ -

col1    0.395263
col2    0.204418
col3   -0.795188
dtype: float64

Reindexingเปลี่ยนป้ายชื่อแถวและป้ายชื่อคอลัมน์ของ DataFrame ในการจัดทำดัชนีใหม่หมายถึงการปรับข้อมูลให้ตรงกับชุดของป้ายกำกับที่กำหนดตามแกนเฉพาะ

การดำเนินการหลายอย่างสามารถทำได้ผ่านการจัดทำดัชนีเช่น -

  • จัดลำดับข้อมูลที่มีอยู่ใหม่ให้ตรงกับป้ายกำกับชุดใหม่

  • ใส่เครื่องหมายค่าที่ขาดหายไป (NA) ในตำแหน่งป้ายที่ไม่มีข้อมูลสำหรับป้ายกำกับ

ตัวอย่าง

import pandas as pd
import numpy as np

N=20

df = pd.DataFrame({
   'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
   'x': np.linspace(0,stop=N-1,num=N),
   'y': np.random.rand(N),
   'C': np.random.choice(['Low','Medium','High'],N).tolist(),
   'D': np.random.normal(100, 10, size=(N)).tolist()
})

#reindex the DataFrame
df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])

print df_reindexed

มัน output มีดังนี้ -

A    C     B
0  2016-01-01  Low   NaN
2  2016-01-03  High  NaN
5  2016-01-06  Low   NaN

Reindex เพื่อจัดแนวกับวัตถุอื่น ๆ

คุณอาจต้องการนำวัตถุและทำดัชนีแกนของมันอีกครั้งเพื่อให้มีป้ายกำกับเหมือนกับวัตถุอื่น ลองพิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจเช่นเดียวกัน

ตัวอย่าง

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])

df1 = df1.reindex_like(df2)
print df1

มัน output มีดังนี้ -

col1         col2         col3
0    -2.467652    -1.211687    -0.391761
1    -0.287396     0.522350     0.562512
2    -0.255409    -0.483250     1.866258
3    -1.150467    -0.646493    -0.222462
4     0.152768    -2.056643     1.877233
5    -1.155997     1.528719    -1.343719
6    -1.015606    -1.245936    -0.295275

Note - ที่นี่ df1 DataFrame ได้รับการเปลี่ยนแปลงและจัดทำดัชนีใหม่เช่น df2. ชื่อคอลัมน์ควรตรงกันไม่เช่นนั้นจะเพิ่ม NAN สำหรับป้ายชื่อคอลัมน์ทั้งหมด

กรอกข้อมูลขณะทำดัชนีใหม่

reindex() ใช้วิธีพารามิเตอร์ทางเลือกซึ่งเป็นวิธีการเติมที่มีค่าดังนี้ -

  • pad/ffill - กรอกค่าไปข้างหน้า

  • bfill/backfill - กรอกค่าย้อนหลัง

  • nearest - กรอกจากค่าดัชนีที่ใกล้ที่สุด

ตัวอย่าง

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])

# Padding NAN's
print df2.reindex_like(df1)

# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill:")
print df2.reindex_like(df1,method='ffill')

มัน output มีดังนี้ -

col1        col2       col3
0    1.311620   -0.707176   0.599863
1   -0.423455   -0.700265   1.133371
2         NaN         NaN        NaN
3         NaN         NaN        NaN
4         NaN         NaN        NaN
5         NaN         NaN        NaN

Data Frame with Forward Fill:
         col1        col2        col3
0    1.311620   -0.707176    0.599863
1   -0.423455   -0.700265    1.133371
2   -0.423455   -0.700265    1.133371
3   -0.423455   -0.700265    1.133371
4   -0.423455   -0.700265    1.133371
5   -0.423455   -0.700265    1.133371

Note - เบาะสี่แถวสุดท้าย

ขีด จำกัด ในการเติมขณะทำดัชนีใหม่

อาร์กิวเมนต์ จำกัด ให้การควบคุมเพิ่มเติมเกี่ยวกับการเติมในขณะที่ทำดัชนีใหม่ ขีด จำกัด ระบุจำนวนสูงสุดของการแข่งขันติดต่อกัน ให้เราพิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจเช่นเดียวกัน -

ตัวอย่าง

import pandas as pd
import numpy as np
 
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])

# Padding NAN's
print df2.reindex_like(df1)

# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill limiting to 1:")
print df2.reindex_like(df1,method='ffill',limit=1)

มัน output มีดังนี้ -

col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2         NaN         NaN         NaN
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN

Data Frame with Forward Fill limiting to 1:
         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2   -0.055713   -0.021732   -0.174577
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN

Note- สังเกตเฉพาะแถวที่ 7 เท่านั้นที่เต็มไปด้วยแถวที่ 6 ก่อนหน้า จากนั้นแถวจะเหลือตามที่เป็นอยู่

การเปลี่ยนชื่อ

วิธีการเปลี่ยนชื่อ () ช่วยให้คุณสามารถกำหนดชื่อแกนใหม่ตามการแมปบางส่วน (คำสั่งหรือชุดข้อมูล) หรือฟังก์ชันโดยพลการ

ให้เราพิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจสิ่งนี้ -

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
print df1

print ("After renaming the rows and columns:")
print df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
index = {0 : 'apple', 1 : 'banana', 2 : 'durian'})

มัน output มีดังนี้ -

col1        col2        col3
0    0.486791    0.105759    1.540122
1   -0.990237    1.007885   -0.217896
2   -0.483855   -1.645027   -1.194113
3   -0.122316    0.566277   -0.366028
4   -0.231524   -0.721172   -0.112007
5    0.438810    0.000225    0.435479

After renaming the rows and columns:
                c1          c2        col3
apple     0.486791    0.105759    1.540122
banana   -0.990237    1.007885   -0.217896
durian   -0.483855   -1.645027   -1.194113
3        -0.122316    0.566277   -0.366028
4        -0.231524   -0.721172   -0.112007
5         0.438810    0.000225    0.435479

วิธีการเปลี่ยนชื่อ () ให้ไฟล์ inplaceพารามิเตอร์ที่ตั้งชื่อซึ่งโดยค่าเริ่มต้นคือ False และคัดลอกข้อมูลพื้นฐาน ผ่านinplace=True เพื่อเปลี่ยนชื่อข้อมูลในสถานที่

ลักษณะการทำงานของการทำซ้ำขั้นพื้นฐานบนวัตถุ Pandas ขึ้นอยู่กับประเภท เมื่อทำซ้ำบนซีรี่ส์จะถือว่าเป็นเหมือนอาร์เรย์และการวนซ้ำพื้นฐานจะสร้างค่า โครงสร้างข้อมูลอื่น ๆ เช่น DataFrame และ Panel ให้ทำตามdict-like รูปแบบของการทำซ้ำใน keys ของวัตถุ

ในระยะสั้นการทำซ้ำพื้นฐาน (สำหรับ i ในวัตถุ) ผลิต -

  • Series - ค่า

  • DataFrame - ป้ายชื่อคอลัมน์

  • Panel - ป้ายกำกับรายการ

การทำ DataFrame ซ้ำ

การวนซ้ำ DataFrame ทำให้ชื่อคอลัมน์ ขอให้เราพิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจเช่นเดียวกัน

import pandas as pd
import numpy as np
 
N=20
df = pd.DataFrame({
   'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
   'x': np.linspace(0,stop=N-1,num=N),
   'y': np.random.rand(N),
   'C': np.random.choice(['Low','Medium','High'],N).tolist(),
   'D': np.random.normal(100, 10, size=(N)).tolist()
   })

for col in df:
   print col

มัน output มีดังนี้ -

A
C
D
x
y

ในการวนซ้ำแถวของ DataFrame เราสามารถใช้ฟังก์ชันต่อไปนี้ -

  • iteritems() - เพื่อวนซ้ำคู่ (คีย์ค่า)

  • iterrows() - วนซ้ำแถวเป็นคู่ (ดัชนีชุดข้อมูล)

  • itertuples() - วนซ้ำในแถวเป็น namedtuples

iteritems ()

วนซ้ำในแต่ละคอลัมน์เป็นคีย์คู่ค่ากับเลเบลเป็นค่าคีย์และคอลัมน์เป็นออบเจ็กต์ซีรี่ส์

import pandas as pd
import numpy as np
 
df = pd.DataFrame(np.random.randn(4,3),columns=['col1','col2','col3'])
for key,value in df.iteritems():
   print key,value

มัน output มีดังนี้ -

col1 0    0.802390
1    0.324060
2    0.256811
3    0.839186
Name: col1, dtype: float64

col2 0    1.624313
1   -1.033582
2    1.796663
3    1.856277
Name: col2, dtype: float64

col3 0   -0.022142
1   -0.230820
2    1.160691
3   -0.830279
Name: col3, dtype: float64

สังเกตแต่ละคอลัมน์จะวนซ้ำแยกกันเป็นคู่คีย์ - ค่าในซีรีส์

iterrows ()

iterrows () ส่งคืนตัววนซ้ำที่ให้ค่าดัชนีแต่ละค่าพร้อมกับชุดข้อมูลที่มีข้อมูลในแต่ละแถว

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
for row_index,row in df.iterrows():
   print row_index,row

มัน output มีดังนี้ -

0  col1    1.529759
   col2    0.762811
   col3   -0.634691
Name: 0, dtype: float64

1  col1   -0.944087
   col2    1.420919
   col3   -0.507895
Name: 1, dtype: float64
 
2  col1   -0.077287
   col2   -0.858556
   col3   -0.663385
Name: 2, dtype: float64
3  col1    -1.638578
   col2     0.059866
   col3     0.493482
Name: 3, dtype: float64

Note - เพราะ iterrows()วนซ้ำในแถวจะไม่รักษาประเภทข้อมูลไว้ในแถว 0,1,2 คือดัชนีแถวและ col1, col2, col3 เป็นดัชนีคอลัมน์

itertuples ()

itertuples () วิธีการจะส่งคืนตัวทำซ้ำที่ให้ชื่อทูเปิลสำหรับแต่ละแถวใน DataFrame องค์ประกอบแรกของทูเปิลจะเป็นค่าดัชนีที่สอดคล้องกันของแถวในขณะที่ค่าที่เหลือคือค่าของแถว

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
for row in df.itertuples():
    print row

มัน output มีดังนี้ -

Pandas(Index=0, col1=1.5297586201375899, col2=0.76281127433814944, col3=-
0.6346908238310438)

Pandas(Index=1, col1=-0.94408735763808649, col2=1.4209186418359423, col3=-
0.50789517967096232)

Pandas(Index=2, col1=-0.07728664756791935, col2=-0.85855574139699076, col3=-
0.6633852507207626)

Pandas(Index=3, col1=0.65734942534106289, col2=-0.95057710432604969,
col3=0.80344487462316527)

Note- อย่าพยายามแก้ไขวัตถุใด ๆ ในขณะที่ทำซ้ำ การวนซ้ำมีไว้สำหรับการอ่านและตัววนซ้ำจะส่งคืนสำเนาของวัตถุต้นฉบับ (มุมมอง) ดังนั้นการเปลี่ยนแปลงจะไม่สะท้อนถึงวัตถุดั้งเดิม

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])

for index, row in df.iterrows():
   row['a'] = 10
print df

มัน output มีดังนี้ -

col1       col2       col3
0  -1.739815   0.735595  -0.295589
1   0.635485   0.106803   1.527922
2  -0.939064   0.547095   0.038585
3  -1.016509  -0.116580  -0.523158

สังเกตไม่มีการเปลี่ยนแปลงสะท้อนให้เห็น

Pandas มีให้เลือกสองแบบ พวกเขาคือ -

  • ตามฉลาก
  • ตามมูลค่าจริง

ให้เราพิจารณาตัวอย่างที่มีผลลัพธ์

import pandas as pd
import numpy as np

unsorted_df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
mns=['col2','col1'])
print unsorted_df

มัน output มีดังนี้ -

col2       col1
1  -2.063177   0.537527
4   0.142932  -0.684884
6   0.012667  -0.389340
2  -0.548797   1.848743
3  -1.044160   0.837381
5   0.385605   1.300185
9   1.031425  -1.002967
8  -0.407374  -0.435142
0   2.237453  -1.067139
7  -1.445831  -1.701035

ใน unsorted_df, labels และ valuesไม่ถูกจัดเรียง ให้เราดูว่าสามารถจัดเรียงได้อย่างไร

ตามฉลาก

ใช้ sort_index()วิธีการโดยการส่งผ่านอาร์กิวเมนต์แกนและลำดับของการเรียงลำดับ DataFrame สามารถจัดเรียงได้ โดยค่าเริ่มต้นการเรียงลำดับจะทำบนป้ายชื่อแถวตามลำดับจากน้อยไปมาก

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
   mns = ['col2','col1'])

sorted_df=unsorted_df.sort_index()
print sorted_df

มัน output มีดังนี้ -

col2       col1
0   0.208464   0.627037
1   0.641004   0.331352
2  -0.038067  -0.464730
3  -0.638456  -0.021466
4   0.014646  -0.737438
5  -0.290761  -1.669827
6  -0.797303  -0.018737
7   0.525753   1.628921
8  -0.567031   0.775951
9   0.060724  -0.322425

ลำดับการเรียงลำดับ

โดยการส่งผ่านค่าบูลีนไปยังพารามิเตอร์จากน้อยไปหามากสามารถควบคุมลำดับของการเรียงลำดับได้ ขอให้เราพิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจเช่นเดียวกัน

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
   mns = ['col2','col1'])

sorted_df = unsorted_df.sort_index(ascending=False)
print sorted_df

มัน output มีดังนี้ -

col2        col1
9    0.825697    0.374463
8   -1.699509    0.510373
7   -0.581378    0.622958
6   -0.202951    0.954300
5   -1.289321   -1.551250
4    1.302561    0.851385
3   -0.157915   -0.388659
2   -1.222295    0.166609
1    0.584890   -0.291048
0    0.668444   -0.061294

จัดเรียงคอลัมน์

โดยการส่งอาร์กิวเมนต์แกนที่มีค่า 0 หรือ 1 การเรียงลำดับสามารถทำได้บนป้ายชื่อคอลัมน์ ตามค่าเริ่มต้นแกน = 0 จัดเรียงตามแถว ขอให้เราพิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจเช่นเดียวกัน

import pandas as pd
import numpy as np
 
unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
   mns = ['col2','col1'])
 
sorted_df=unsorted_df.sort_index(axis=1)

print sorted_df

มัน output มีดังนี้ -

col1        col2
1   -0.291048    0.584890
4    0.851385    1.302561
6    0.954300   -0.202951
2    0.166609   -1.222295
3   -0.388659   -0.157915
5   -1.551250   -1.289321
9    0.374463    0.825697
8    0.510373   -1.699509
0   -0.061294    0.668444
7    0.622958   -0.581378

ตามมูลค่า

เช่นเดียวกับการจัดเรียงดัชนี sort_values()เป็นวิธีการจัดเรียงตามค่า ยอมรับอาร์กิวเมนต์ 'โดย' ซึ่งจะใช้ชื่อคอลัมน์ของ DataFrame ซึ่งค่าจะถูกจัดเรียง

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
   sorted_df = unsorted_df.sort_values(by='col1')

print sorted_df

มัน output มีดังนี้ -

col1  col2
1    1    3
2    1    2
3    1    4
0    2    1

สังเกตค่า col1 จะถูกจัดเรียงและค่า col2 และดัชนีแถวตามลำดับจะเปลี่ยนไปพร้อมกับ col1 ดังนั้นจึงดูไม่เรียงลำดับ

'by' อาร์กิวเมนต์รับรายการค่าคอลัมน์

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
   sorted_df = unsorted_df.sort_values(by=['col1','col2'])

print sorted_df

มัน output มีดังนี้ -

col1 col2
2   1   2
1   1   3
3   1   4
0   2   1

การเรียงลำดับอัลกอริทึม

sort_values()จัดเตรียมข้อกำหนดในการเลือกอัลกอริทึมจากการผสานพอร์ตฮีปพอร์ตและคิวสั้น Mergesort เป็นอัลกอริทึมเดียวที่เสถียร

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by='col1' ,kind='mergesort')

print sorted_df

มัน output มีดังนี้ -

col1 col2
1    1    3
2    1    2
3    1    4
0    2    1

ในบทนี้เราจะพูดถึงการทำงานของสตริงกับซีรี่ส์ / ดัชนีพื้นฐานของเรา ในบทต่อ ๆ ไปเราจะเรียนรู้วิธีการใช้ฟังก์ชันสตริงเหล่านี้บน DataFrame

Pandas มีชุดฟังก์ชันสตริงที่ทำให้ใช้งานข้อมูลสตริงได้ง่าย สิ่งสำคัญที่สุดคือฟังก์ชันเหล่านี้จะละเว้น (หรือไม่รวม) ค่า / NaN ที่ขาดหายไป

เกือบทุกวิธีเหล่านี้ใช้ได้กับฟังก์ชันสตริง Python (อ้างอิง: https://docs.python.org/3/library/stdtypes.html#string-methods). ดังนั้นให้แปลง Series Object เป็น String Object แล้วดำเนินการ

ตอนนี้ให้เราดูว่าแต่ละการดำเนินการทำงานอย่างไร

ซีเนียร์ No ฟังก์ชั่นและคำอธิบาย
1

lower()

แปลงสตริงใน Series / Index เป็นตัวพิมพ์เล็ก

2

upper()

แปลงสตริงในซีรี่ส์ / ดัชนีเป็นตัวพิมพ์ใหญ่

3

len()

คำนวณความยาวสตริง ()

4

strip()

ช่วยตัดช่องว่าง (รวมถึงการขึ้นบรรทัดใหม่) จากแต่ละสตริงในซีรี่ส์ / ดัชนีจากทั้งสองด้าน

5

split(' ')

แยกแต่ละสตริงด้วยรูปแบบที่กำหนด

6

cat(sep=' ')

เชื่อมองค์ประกอบชุด / ดัชนีด้วยตัวคั่นที่กำหนด

7

get_dummies()

ส่งคืน DataFrame ด้วยค่า One-Hot Encoded

8

contains(pattern)

ส่งคืนค่าบูลีนเป็นจริงสำหรับแต่ละองค์ประกอบหากสตริงย่อยมีอยู่ในองค์ประกอบอื่นเป็นเท็จ

9

replace(a,b)

แทนที่ค่า a ด้วยค่า b.

10

repeat(value)

ทำซ้ำแต่ละองค์ประกอบตามจำนวนครั้งที่ระบุ

11

count(pattern)

ส่งกลับจำนวนการปรากฏของรูปแบบในแต่ละองค์ประกอบ

12

startswith(pattern)

ส่งคืนจริงหากองค์ประกอบในซีรี่ส์ / ดัชนีเริ่มต้นด้วยรูปแบบ

13

endswith(pattern)

ส่งคืนจริงหากองค์ประกอบในซีรี่ส์ / ดัชนีลงท้ายด้วยรูปแบบ

14

find(pattern)

ส่งคืนตำแหน่งแรกของการเกิดครั้งแรกของรูปแบบ

15

findall(pattern)

ส่งกลับรายการของรูปแบบที่เกิดขึ้นทั้งหมด

16

swapcase

สลับตัวพิมพ์เล็ก / ใหญ่

17

islower()

ตรวจสอบว่าอักขระทั้งหมดในแต่ละสตริงในซีรี่ส์ / ดัชนีเป็นตัวพิมพ์เล็กหรือไม่ ส่งคืนบูลีน

18

isupper()

ตรวจสอบว่าอักขระทั้งหมดในแต่ละสตริงในซีรี่ส์ / ดัชนีเป็นตัวพิมพ์ใหญ่หรือไม่ ส่งคืนบูลีน

19

isnumeric()

ตรวจสอบว่าอักขระทั้งหมดในแต่ละสตริงในซีรี่ส์ / ดัชนีเป็นตัวเลขหรือไม่ ส่งคืนบูลีน

ตอนนี้ให้เราสร้างซีรี่ส์และดูว่าฟังก์ชันทั้งหมดข้างต้นทำงานอย่างไร

import pandas as pd
import numpy as np

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])

print s

มัน output มีดังนี้ -

0            Tom
1   William Rick
2           John
3        Alber@t
4            NaN
5           1234
6    Steve Smith
dtype: object

ต่ำกว่า ()

import pandas as pd
import numpy as np

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])

print s.str.lower()

มัน output มีดังนี้ -

0            tom
1   william rick
2           john
3        alber@t
4            NaN
5           1234
6    steve smith
dtype: object

บน ()

import pandas as pd
import numpy as np

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])

print s.str.upper()

มัน output มีดังนี้ -

0            TOM
1   WILLIAM RICK
2           JOHN
3        ALBER@T
4            NaN
5           1234
6    STEVE SMITH
dtype: object

เลน ()

import pandas as pd
import numpy as np

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])
print s.str.len()

มัน output มีดังนี้ -

0    3.0
1   12.0
2    4.0
3    7.0
4    NaN
5    4.0
6   10.0
dtype: float64

แถบ ()

import pandas as pd
import numpy as np
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s
print ("After Stripping:")
print s.str.strip()

มัน output มีดังนี้ -

0            Tom
1   William Rick
2           John
3        Alber@t
dtype: object

After Stripping:
0            Tom
1   William Rick
2           John
3        Alber@t
dtype: object

แยก (รูปแบบ)

import pandas as pd
import numpy as np
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s
print ("Split Pattern:")
print s.str.split(' ')

มัน output มีดังนี้ -

0            Tom
1   William Rick
2           John
3        Alber@t
dtype: object

Split Pattern:
0   [Tom, , , , , , , , , , ]
1   [, , , , , William, Rick]
2   [John]
3   [Alber@t]
dtype: object

แมว (sep = pattern)

import pandas as pd
import numpy as np

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.cat(sep='_')

มัน output มีดังนี้ -

Tom _ William Rick_John_Alber@t

get_dummies ()

import pandas as pd
import numpy as np

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.get_dummies()

มัน output มีดังนี้ -

William Rick   Alber@t   John   Tom
0             0         0      0     1
1             1         0      0     0
2             0         0      1     0
3             0         1      0     0

ประกอบด้วย ()

import pandas as pd

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.contains(' ')

มัน output มีดังนี้ -

0   True
1   True
2   False
3   False
dtype: bool

แทนที่ (a, b)

import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s
print ("After replacing @ with $:") print s.str.replace('@','$')

มัน output มีดังนี้ -

0   Tom
1   William Rick
2   John
3   Alber@t
dtype: object

After replacing @ with $: 0 Tom 1 William Rick 2 John 3 Alber$t
dtype: object

ทำซ้ำ (ค่า)

import pandas as pd

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.repeat(2)

มัน output มีดังนี้ -

0   Tom            Tom
1   William Rick   William Rick
2                  JohnJohn
3                  Alber@tAlber@t
dtype: object

นับ (รูปแบบ)

import pandas as pd
 
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print ("The number of 'm's in each string:")
print s.str.count('m')

มัน output มีดังนี้ -

The number of 'm's in each string:
0    1
1    1
2    0
3    0

เริ่มต้นด้วย (รูปแบบ)

import pandas as pd

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print ("Strings that start with 'T':")
print s.str. startswith ('T')

มัน output มีดังนี้ -

0  True
1  False
2  False
3  False
dtype: bool

สิ้นสุดด้วย (รูปแบบ)

import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print ("Strings that end with 't':")
print s.str.endswith('t')

มัน output มีดังนี้ -

Strings that end with 't':
0  False
1  False
2  False
3  True
dtype: bool

ค้นหา (รูปแบบ)

import pandas as pd

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.find('e')

มัน output มีดังนี้ -

0  -1
1  -1
2  -1
3   3
dtype: int64

"-1" แสดงว่าไม่มีรูปแบบดังกล่าวในองค์ประกอบ

findall (รูปแบบ)

import pandas as pd

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.findall('e')

มัน output มีดังนี้ -

0 []
1 []
2 []
3 [e]
dtype: object

รายการค่าว่าง ([]) ระบุว่าไม่มีรูปแบบดังกล่าวในองค์ประกอบ

แลกเปลี่ยน ()

import pandas as pd

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])
print s.str.swapcase()

มัน output มีดังนี้ -

0  tOM
1  wILLIAM rICK
2  jOHN
3  aLBER@T
dtype: object

ไอโซเวอร์ ()

import pandas as pd

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])
print s.str.islower()

มัน output มีดังนี้ -

0  False
1  False
2  False
3  False
dtype: bool

isupper ()

import pandas as pd

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])

print s.str.isupper()

มัน output มีดังนี้ -

0  False
1  False
2  False
3  False
dtype: bool

เป็นตัวเลข ()

import pandas as pd

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])

print s.str.isnumeric()

มัน output มีดังนี้ -

0  False
1  False
2  False
3  False
dtype: bool

Pandas มี API เพื่อปรับแต่งพฤติกรรมบางอย่างการแสดงผลส่วนใหญ่จะใช้

API ประกอบด้วยฟังก์ชันที่เกี่ยวข้องห้าฟังก์ชัน พวกเขาคือ -

  • get_option()
  • set_option()
  • reset_option()
  • describe_option()
  • option_context()

ตอนนี้ให้เราเข้าใจว่าฟังก์ชันทำงานอย่างไร

get_option (พารามิเตอร์)

get_option รับพารามิเตอร์เดียวและส่งคืนค่าตามที่ระบุในเอาต์พุตด้านล่าง -

display.max_rows

แสดงจำนวนค่าเริ่มต้น Interpreter อ่านค่านี้และแสดงแถวที่มีค่านี้เป็นขีด จำกัด บนที่จะแสดง

import pandas as pd
print pd.get_option("display.max_rows")

มัน output มีดังนี้ -

60

display.max_columns

แสดงจำนวนค่าเริ่มต้น Interpreter อ่านค่านี้และแสดงแถวที่มีค่านี้เป็นขีด จำกัด บนที่จะแสดง

import pandas as pd
print pd.get_option("display.max_columns")

มัน output มีดังนี้ -

20

ที่นี่ 60 และ 20 คือค่าพารามิเตอร์การกำหนดค่าเริ่มต้น

set_option (พารามิเตอร์, ค่า)

set_option รับสองอาร์กิวเมนต์และกำหนดค่าเป็นพารามิเตอร์ดังที่แสดงด้านล่าง -

display.max_rows

การใช้ set_option()เราสามารถเปลี่ยนจำนวนแถวเริ่มต้นที่จะแสดงได้

import pandas as pd

pd.set_option("display.max_rows",80)

print pd.get_option("display.max_rows")

มัน output มีดังนี้ -

80

display.max_columns

การใช้ set_option()เราสามารถเปลี่ยนจำนวนแถวเริ่มต้นที่จะแสดงได้

import pandas as pd

pd.set_option("display.max_columns",30)

print pd.get_option("display.max_columns")

มัน output มีดังนี้ -

30

reset_option (พารามิเตอร์)

reset_option รับอาร์กิวเมนต์และตั้งค่ากลับเป็นค่าเริ่มต้น

display.max_rows

การใช้ reset_option () เราสามารถเปลี่ยนค่ากลับเป็นจำนวนแถวเริ่มต้นที่จะแสดงได้

import pandas as pd

pd.reset_option("display.max_rows")
print pd.get_option("display.max_rows")

มัน output มีดังนี้ -

60

description_option (พารามิเตอร์)

describe_option พิมพ์คำอธิบายของอาร์กิวเมนต์

display.max_rows

การใช้ reset_option () เราสามารถเปลี่ยนค่ากลับเป็นจำนวนแถวเริ่มต้นที่จะแสดงได้

import pandas as pd
pd.describe_option("display.max_rows")

มัน output มีดังนี้ -

display.max_rows : int
   If max_rows is exceeded, switch to truncate view. Depending on
   'large_repr', objects are either centrally truncated or printed as
   a summary view. 'None' value means unlimited.

   In case python/IPython is running in a terminal and `large_repr`
   equals 'truncate' this can be set to 0 and pandas will auto-detect
   the height of the terminal and print a truncated object which fits
   the screen height. The IPython notebook, IPython qtconsole, or
   IDLE do not run in a terminal and hence it is not possible to do
   correct auto-detection.
   [default: 60] [currently: 60]

option_context ()

option_context ตัวจัดการบริบทใช้เพื่อตั้งค่าตัวเลือกใน with statementชั่วคราว. ค่าตัวเลือกจะถูกเรียกคืนโดยอัตโนมัติเมื่อคุณออกจากไฟล์with block -

display.max_rows

การใช้ option_context () เราสามารถกำหนดค่าชั่วคราว

import pandas as pd
with pd.option_context("display.max_rows",10):
   print(pd.get_option("display.max_rows"))
   print(pd.get_option("display.max_rows"))

มัน output มีดังนี้ -

10
10

ดูความแตกต่างระหว่างข้อความสั่งพิมพ์ครั้งแรกและครั้งที่สอง คำสั่งแรกพิมพ์ค่าที่กำหนดโดยoption_context() ซึ่งเป็นการชั่วคราวภายในไฟล์ with contextตัวเอง หลังจากwith contextคำสั่งการพิมพ์ที่สองจะพิมพ์ค่าที่กำหนดไว้

พารามิเตอร์ที่ใช้บ่อย

ซีเนียร์ No พารามิเตอร์และคำอธิบาย
1

display.max_rows

แสดงจำนวนแถวสูงสุดที่จะแสดง

2

2 display.max_columns

แสดงจำนวนคอลัมน์สูงสุดที่จะแสดง

3

display.expand_frame_repr

แสดง DataFrames เป็น Stretch Pages

4

display.max_colwidth

แสดงความกว้างของคอลัมน์สูงสุด

5

display.precision

แสดงความแม่นยำสำหรับตัวเลขทศนิยม

ในบทนี้เราจะพูดถึงวิธีการหั่นและลูกเต๋าวันที่และโดยทั่วไปจะได้รับส่วนย่อยของวัตถุแพนด้า

ตัวดำเนินการจัดทำดัชนี Python และ NumPy "[]" และตัวดำเนินการแอตทริบิวต์ "" ให้การเข้าถึงโครงสร้างข้อมูลของ Pandas อย่างรวดเร็วและง่ายดายในกรณีการใช้งานที่หลากหลาย อย่างไรก็ตามเนื่องจากไม่ทราบประเภทของข้อมูลที่จะเข้าถึงล่วงหน้าการใช้ตัวดำเนินการมาตรฐานโดยตรงจึงมีข้อ จำกัด ในการปรับให้เหมาะสม สำหรับรหัสการผลิตเราขอแนะนำให้คุณใช้ประโยชน์จากวิธีการเข้าถึงข้อมูลแพนด้าที่ได้รับการปรับให้เหมาะสมซึ่งอธิบายไว้ในบทนี้

ตอนนี้ Pandas รองรับการจัดทำดัชนีหลายแกนสามประเภท ทั้งสามประเภทได้กล่าวไว้ในตารางต่อไปนี้ -

ซีเนียร์ No การจัดทำดัชนีและคำอธิบาย
1

.loc()

ตามฉลาก

2

.iloc()

ตามจำนวนเต็ม

3

.ix()

ตามป้ายกำกับและจำนวนเต็ม

.loc ()

นุ่นให้วิธีการต่างๆอย่างหมดจด label based indexing. เมื่อหั่นจะมีการผูกเริ่มต้นด้วย จำนวนเต็มเป็นป้ายกำกับที่ถูกต้อง แต่หมายถึงป้ายกำกับไม่ใช่ตำแหน่ง

.loc() มีวิธีการเข้าถึงหลายวิธีเช่น -

  • ป้ายกำกับสเกลาร์เดียว
  • รายการป้ายกำกับ
  • วัตถุชิ้นหนึ่ง
  • อาร์เรย์บูลีน

locใช้ตัวดำเนินการเดี่ยว / รายการ / ช่วงสองตัวคั่นด้วย "," อันแรกระบุแถวและแถวที่สองระบุคอลัมน์

ตัวอย่าง 1

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

#select all rows for a specific column
print df.loc[:,'A']

มัน output มีดังนี้ -

a   0.391548
b  -0.070649
c  -0.317212
d  -2.162406
e   2.202797
f   0.613709
g   1.050559
h   1.122680
Name: A, dtype: float64

ตัวอย่าง 2

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# Select all rows for multiple columns, say list[]
print df.loc[:,['A','C']]

มัน output มีดังนี้ -

A           C
a    0.391548    0.745623
b   -0.070649    1.620406
c   -0.317212    1.448365
d   -2.162406   -0.873557
e    2.202797    0.528067
f    0.613709    0.286414
g    1.050559    0.216526
h    1.122680   -1.621420

ตัวอย่างที่ 3

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# Select few rows for multiple columns, say list[]
print df.loc[['a','b','f','h'],['A','C']]

มัน output มีดังนี้ -

A          C
a   0.391548   0.745623
b  -0.070649   1.620406
f   0.613709   0.286414
h   1.122680  -1.621420

ตัวอย่างที่ 4

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# Select range of rows for all columns
print df.loc['a':'h']

มัน output มีดังนี้ -

A           B          C          D
a    0.391548   -0.224297   0.745623   0.054301
b   -0.070649   -0.880130   1.620406   1.419743
c   -0.317212   -1.929698   1.448365   0.616899
d   -2.162406    0.614256  -0.873557   1.093958
e    2.202797   -2.315915   0.528067   0.612482
f    0.613709   -0.157674   0.286414  -0.500517
g    1.050559   -2.272099   0.216526   0.928449
h    1.122680    0.324368  -1.621420  -0.741470

ตัวอย่างที่ 5

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# for getting values with a boolean array
print df.loc['a']>0

มัน output มีดังนี้ -

A  False
B  True
C  False
D  False
Name: a, dtype: bool

.iloc ()

หมีแพนด้าจัดเตรียมวิธีการต่างๆเพื่อให้ได้ดัชนีตามจำนวนเต็มล้วนๆ เช่นเดียวกับ python และ numpy สิ่งเหล่านี้คือ0-based การจัดทำดัชนี

วิธีการเข้าถึงต่างๆมีดังนี้ -

  • จำนวนเต็ม
  • รายการจำนวนเต็ม
  • ช่วงของค่า

ตัวอย่าง 1

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# select all rows for a specific column
print df.iloc[:4]

มัน output มีดังนี้ -

A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# Integer slicing
print df.iloc[:4]
print df.iloc[1:5, 2:4]

มัน output มีดังนี้ -

A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251

           C          D
1  -0.813012   0.631615
2   0.025070   0.230806
3   0.826977  -0.026251
4   1.423332   1.130568

ตัวอย่างที่ 3

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# Slicing through list of values
print df.iloc[[1, 3, 5], [1, 3]]
print df.iloc[1:3, :]
print df.iloc[:,1:3]

มัน output มีดังนี้ -

B           D
1   0.890791    0.631615
3  -1.284314   -0.026251
5  -0.512888   -0.518930

           A           B           C           D
1  -0.685354    0.890791   -0.813012    0.631615
2  -0.783192   -0.531378    0.025070    0.230806

           B           C
0   0.256239   -1.270702
1   0.890791   -0.813012
2  -0.531378    0.025070
3  -1.284314    0.826977
4  -0.460729    1.423332
5  -0.512888    0.581409
6  -1.204853    0.098060
7  -0.947857    0.641358

.ix ()

นอกเหนือจากการใช้เลเบลบริสุทธิ์และอิงจากจำนวนเต็มแล้ว Pandas ยังมีเมธอดไฮบริดสำหรับการเลือกและการย่อยอ็อบเจ็กต์โดยใช้ตัวดำเนินการ. ix ()

ตัวอย่าง 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# Integer slicing
print df.ix[:4]

มัน output มีดังนี้ -

A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Index slicing
print df.ix[:,'A']

มัน output มีดังนี้ -

0   0.699435
1  -0.685354
2  -0.783192
3   0.539042
4  -1.044209
5  -1.415411
6   1.062095
7   0.994204
Name: A, dtype: float64

การใช้สัญกรณ์

การรับค่าจากวัตถุ Pandas ด้วยการทำดัชนีหลายแกนใช้สัญกรณ์ต่อไปนี้ -

วัตถุ ดัชนี ประเภทผลตอบแทน
ชุด s.loc [ตัวสร้างดัชนี] ค่าสเกลาร์
DataFrame df.loc [row_index, col_index] วัตถุซีรี่ส์
แผงหน้าปัด p.loc [item_index, major_index, minor_index] p.loc [item_index, major_index, minor_index]

Note − .iloc() & .ix() ใช้ตัวเลือกการจัดทำดัชนีเดียวกันและค่า Return

ตอนนี้ให้เราดูว่าแต่ละการดำเนินการสามารถดำเนินการกับวัตถุ DataFrame ได้อย่างไร เราจะใช้ตัวดำเนินการจัดทำดัชนีพื้นฐาน '[]' -

ตัวอย่าง 1

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df['A']

มัน output มีดังนี้ -

0  -0.478893
1   0.391931
2   0.336825
3  -1.055102
4  -0.165218
5  -0.328641
6   0.567721
7  -0.759399
Name: A, dtype: float64

Note - เราสามารถส่งรายการค่าไปยัง [] เพื่อเลือกคอลัมน์เหล่านั้น

ตัวอย่าง 2

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

print df[['A','B']]

มัน output มีดังนี้ -

A           B
0  -0.478893   -0.606311
1   0.391931   -0.949025
2   0.336825    0.093717
3  -1.055102   -0.012944
4  -0.165218    1.550310
5  -0.328641   -0.226363
6   0.567721   -0.312585
7  -0.759399   -0.372696

ตัวอย่างที่ 3

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df[2:2]

มัน output มีดังนี้ -

Columns: [A, B, C, D]
Index: []

การเข้าถึงแอตทริบิวต์

คอลัมน์สามารถเลือกได้โดยใช้ตัวดำเนินการแอตทริบิวต์ "."

ตัวอย่าง

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

print df.A

มัน output มีดังนี้ -

0   -0.478893
1    0.391931
2    0.336825
3   -1.055102
4   -0.165218
5   -0.328641
6    0.567721
7   -0.759399
Name: A, dtype: float64

วิธีการทางสถิติช่วยในการทำความเข้าใจและวิเคราะห์พฤติกรรมของข้อมูล ตอนนี้เราจะเรียนรู้ฟังก์ชันทางสถิติบางอย่างซึ่งเราสามารถนำไปใช้กับวัตถุ Pandas ได้

Percent_change

Series, DatFrames และ Panel ล้วนมีฟังก์ชัน pct_change(). ฟังก์ชันนี้จะเปรียบเทียบทุกองค์ประกอบกับองค์ประกอบก่อนหน้าและคำนวณเปอร์เซ็นต์การเปลี่ยนแปลง

import pandas as pd
import numpy as np
s = pd.Series([1,2,3,4,5,4])
print s.pct_change()

df = pd.DataFrame(np.random.randn(5, 2))
print df.pct_change()

มัน output มีดังนี้ -

0        NaN
1   1.000000
2   0.500000
3   0.333333
4   0.250000
5  -0.200000
dtype: float64

            0          1
0         NaN        NaN
1  -15.151902   0.174730
2  -0.746374   -1.449088
3  -3.582229   -3.165836
4   15.601150  -1.860434

โดยค่าเริ่มต้นไฟล์ pct_change()ดำเนินการกับคอลัมน์ หากคุณต้องการใช้แถวเดียวกันอย่างชาญฉลาดให้ใช้axis=1() การโต้เถียง.

ความแปรปรวนร่วม

ความแปรปรวนร่วมถูกนำไปใช้กับข้อมูลชุดข้อมูล วัตถุ Series มีวิธีการ cov ในการคำนวณความแปรปรวนร่วมระหว่างวัตถุอนุกรม NA จะถูกแยกออกโดยอัตโนมัติ

ซีรีส์ Cov

import pandas as pd
import numpy as np
s1 = pd.Series(np.random.randn(10))
s2 = pd.Series(np.random.randn(10))
print s1.cov(s2)

มัน output มีดังนี้ -

-0.12978405324

วิธีความแปรปรวนร่วมเมื่อใช้กับ DataFrame คำนวณ cov ระหว่างคอลัมน์ทั้งหมด

import pandas as pd
import numpy as np
frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
print frame['a'].cov(frame['b'])
print frame.cov()

มัน output มีดังนี้ -

-0.58312921152741437

           a           b           c           d            e
a   1.780628   -0.583129   -0.185575    0.003679    -0.136558
b  -0.583129    1.297011    0.136530   -0.523719     0.251064
c  -0.185575    0.136530    0.915227   -0.053881    -0.058926
d   0.003679   -0.523719   -0.053881    1.521426    -0.487694
e  -0.136558    0.251064   -0.058926   -0.487694     0.960761

Note - สังเกตไฟล์ cov ระหว่าง a และ b คอลัมน์ในคำสั่งแรกและค่าเดียวกันคือค่าที่ส่งคืนโดย cov บน DataFrame

สหสัมพันธ์

สหสัมพันธ์แสดงความสัมพันธ์เชิงเส้นระหว่างอาร์เรย์สองค่า (อนุกรม) มีหลายวิธีในการคำนวณความสัมพันธ์เช่นเพียร์สัน (ค่าเริ่มต้น) สเปียร์แมนและเคนดอล

import pandas as pd
import numpy as np
frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])

print frame['a'].corr(frame['b'])
print frame.corr()

มัน output มีดังนี้ -

-0.383712785514

           a          b          c          d           e
a   1.000000  -0.383713  -0.145368   0.002235   -0.104405
b  -0.383713   1.000000   0.125311  -0.372821    0.224908
c  -0.145368   0.125311   1.000000  -0.045661   -0.062840
d   0.002235  -0.372821  -0.045661   1.000000   -0.403380
e  -0.104405   0.224908  -0.062840  -0.403380    1.000000

หากคอลัมน์ที่ไม่ใช่ตัวเลขมีอยู่ใน DataFrame คอลัมน์นั้นจะถูกแยกออกโดยอัตโนมัติ

การจัดอันดับข้อมูล

การจัดอันดับข้อมูลทำให้เกิดการจัดอันดับสำหรับแต่ละองค์ประกอบในอาร์เรย์ขององค์ประกอบ ในกรณีของความสัมพันธ์ให้กำหนดอันดับเฉลี่ย

import pandas as pd
import numpy as np

s = pd.Series(np.random.np.random.randn(5), index=list('abcde'))
s['d'] = s['b'] # so there's a tie
print s.rank()

มัน output มีดังนี้ -

a  1.0
b  3.5
c  2.0
d  3.5
e  5.0
dtype: float64

อันดับเป็นทางเลือกที่จะใช้พารามิเตอร์จากน้อยไปมากซึ่งโดยค่าเริ่มต้นจะเป็นจริง เมื่อเป็นเท็จข้อมูลจะถูกจัดลำดับแบบย้อนกลับโดยค่าที่มากกว่าจะกำหนดอันดับที่น้อยกว่า

อันดับรองรับวิธีการทำลายไทด์ที่แตกต่างกันซึ่งระบุด้วยพารามิเตอร์วิธีการ -

  • average - อันดับเฉลี่ยของกลุ่มที่ผูก

  • min - อันดับต่ำสุดในกลุ่ม

  • max - อันดับสูงสุดในกลุ่ม

  • first - อันดับที่กำหนดตามลำดับที่ปรากฏในอาร์เรย์

สำหรับการทำงานกับข้อมูลตัวเลข Pandas มีรูปแบบต่างๆเช่นการกลิ้งการขยายและการย้ายน้ำหนักแบบเลขชี้กำลังสำหรับสถิติหน้าต่าง ในจำนวนนี้ ได้แก่sum, mean, median, variance, covariance, correlation, เป็นต้น

ตอนนี้เราจะเรียนรู้ว่าแต่ละสิ่งเหล่านี้สามารถนำไปใช้กับวัตถุ DataFrame ได้อย่างไร

.rolling () ฟังก์ชัน

ฟังก์ชันนี้สามารถใช้กับชุดข้อมูลได้ ระบุไฟล์window=n อาร์กิวเมนต์และใช้ฟังก์ชันทางสถิติที่เหมาะสมด้านบน

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df.rolling(window=3).mean()

มัน output มีดังนี้ -

A           B           C           D
2000-01-01        NaN         NaN         NaN         NaN
2000-01-02        NaN         NaN         NaN         NaN
2000-01-03   0.434553   -0.667940   -1.051718   -0.826452
2000-01-04   0.628267   -0.047040   -0.287467   -0.161110
2000-01-05   0.398233    0.003517    0.099126   -0.405565
2000-01-06   0.641798    0.656184   -0.322728    0.428015
2000-01-07   0.188403    0.010913   -0.708645    0.160932
2000-01-08   0.188043   -0.253039   -0.818125   -0.108485
2000-01-09   0.682819   -0.606846   -0.178411   -0.404127
2000-01-10   0.688583    0.127786    0.513832   -1.067156

Note - เนื่องจากขนาดหน้าต่างคือ 3 สำหรับสององค์ประกอบแรกจึงมีค่าว่างและจากค่าที่สามค่าจะเป็นค่าเฉลี่ยของ n, n-1 และ n-2องค์ประกอบ ดังนั้นเรายังสามารถใช้ฟังก์ชั่นต่างๆดังที่กล่าวข้างต้น

.expanding () ฟังก์ชัน

ฟังก์ชันนี้สามารถใช้กับชุดข้อมูลได้ ระบุไฟล์min_periods=n อาร์กิวเมนต์และใช้ฟังก์ชันทางสถิติที่เหมาะสมด้านบน

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df.expanding(min_periods=3).mean()

มัน output มีดังนี้ -

A           B           C           D
2000-01-01        NaN         NaN         NaN         NaN
2000-01-02        NaN         NaN         NaN         NaN
2000-01-03   0.434553   -0.667940   -1.051718   -0.826452
2000-01-04   0.743328   -0.198015   -0.852462   -0.262547
2000-01-05   0.614776   -0.205649   -0.583641   -0.303254
2000-01-06   0.538175   -0.005878   -0.687223   -0.199219
2000-01-07   0.505503   -0.108475   -0.790826   -0.081056
2000-01-08   0.454751   -0.223420   -0.671572   -0.230215
2000-01-09   0.586390   -0.206201   -0.517619   -0.267521
2000-01-10   0.560427   -0.037597   -0.399429   -0.376886

.ewm () ฟังก์ชัน

ewmถูกนำไปใช้กับชุดข้อมูล ระบุ com, span,halflifeอาร์กิวเมนต์และใช้ฟังก์ชันทางสถิติที่เหมาะสมด้านบน จะกำหนดน้ำหนักแบบทวีคูณ

import pandas as pd
import numpy as np
 
df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df.ewm(com=0.5).mean()

มัน output มีดังนี้ -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   0.865131   -0.453626   -1.137961    0.058747
2000-01-03  -0.132245   -0.807671   -0.308308   -1.491002
2000-01-04   1.084036    0.555444   -0.272119    0.480111
2000-01-05   0.425682    0.025511    0.239162   -0.153290
2000-01-06   0.245094    0.671373   -0.725025    0.163310
2000-01-07   0.288030   -0.259337   -1.183515    0.473191
2000-01-08   0.162317   -0.771884   -0.285564   -0.692001
2000-01-09   1.147156   -0.302900    0.380851   -0.607976
2000-01-10   0.600216    0.885614    0.569808   -1.110113

ฟังก์ชันหน้าต่างส่วนใหญ่ใช้ในการค้นหาแนวโน้มภายในข้อมูลแบบกราฟิกโดยการทำให้เส้นโค้งเรียบ หากข้อมูลในชีวิตประจำวันมีการเปลี่ยนแปลงจำนวนมากและมีจุดข้อมูลจำนวนมากการเก็บตัวอย่างและการลงจุดเป็นวิธีการหนึ่งและใช้การคำนวณหน้าต่างและการลงจุดกราฟบนผลลัพธ์ก็เป็นอีกวิธี ด้วยวิธีการเหล่านี้เราสามารถทำให้เส้นโค้งหรือแนวโน้มเรียบได้

เมื่อกลิ้งขยายและ ewm ออบเจ็กต์ถูกสร้างขึ้นมีวิธีการต่างๆเพื่อดำเนินการรวมข้อมูล

การใช้ Aggregations บน DataFrame

ให้เราสร้าง DataFrame และใช้การรวมกับมัน

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])

print df
r = df.rolling(window=3,min_periods=1)
print r

มัน output มีดังนี้ -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   0.790670   -0.387854   -0.668132    0.267283
2000-01-03  -0.575523   -0.965025    0.060427   -2.179780
2000-01-04   1.669653    1.211759   -0.254695    1.429166
2000-01-05   0.100568   -0.236184    0.491646   -0.466081
2000-01-06   0.155172    0.992975   -1.205134    0.320958
2000-01-07   0.309468   -0.724053   -1.412446    0.627919
2000-01-08   0.099489   -1.028040    0.163206   -1.274331
2000-01-09   1.639500   -0.068443    0.714008   -0.565969
2000-01-10   0.326761    1.479841    0.664282   -1.361169

Rolling [window=3,min_periods=1,center=False,axis=0]

เราสามารถรวมโดยส่งฟังก์ชันไปยัง DataFrame ทั้งหมดหรือเลือกคอลัมน์ผ่านทางมาตรฐาน get item วิธี.

ใช้ Aggregation กับ Whole Dataframe

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r.aggregate(np.sum)

มัน output มีดังนี้ -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469

                    A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469

ใช้การรวมบนคอลัมน์เดียวของ Dataframe

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r['A'].aggregate(np.sum)

มัน output มีดังนี้ -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469
2000-01-01   1.088512
2000-01-02   1.879182
2000-01-03   1.303660
2000-01-04   1.884801
2000-01-05   1.194699
2000-01-06   1.925393
2000-01-07   0.565208
2000-01-08   0.564129
2000-01-09   2.048458
2000-01-10   2.065750
Freq: D, Name: A, dtype: float64

ใช้การรวมในหลายคอลัมน์ของ DataFrame

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r[['A','B']].aggregate(np.sum)

มัน output มีดังนี้ -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469
                    A           B
2000-01-01   1.088512   -0.650942
2000-01-02   1.879182   -1.038796
2000-01-03   1.303660   -2.003821
2000-01-04   1.884801   -0.141119
2000-01-05   1.194699    0.010551
2000-01-06   1.925393    1.968551
2000-01-07   0.565208    0.032738
2000-01-08   0.564129   -0.759118
2000-01-09   2.048458   -1.820537
2000-01-10   2.065750    0.383357

ใช้หลายฟังก์ชันในคอลัมน์เดียวของ DataFrame

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r['A'].aggregate([np.sum,np.mean])

มัน output มีดังนี้ -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469
                  sum       mean
2000-01-01   1.088512   1.088512
2000-01-02   1.879182   0.939591
2000-01-03   1.303660   0.434553
2000-01-04   1.884801   0.628267
2000-01-05   1.194699   0.398233
2000-01-06   1.925393   0.641798
2000-01-07   0.565208   0.188403
2000-01-08   0.564129   0.188043
2000-01-09   2.048458   0.682819
2000-01-10   2.065750   0.688583

ใช้หลายฟังก์ชันในหลายคอลัมน์ของ DataFrame

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r[['A','B']].aggregate([np.sum,np.mean])

มัน output มีดังนี้ -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469
                    A                      B
                  sum       mean         sum        mean
2000-01-01   1.088512   1.088512   -0.650942   -0.650942
2000-01-02   1.879182   0.939591   -1.038796   -0.519398
2000-01-03   1.303660   0.434553   -2.003821   -0.667940
2000-01-04   1.884801   0.628267   -0.141119   -0.047040
2000-01-05   1.194699   0.398233    0.010551    0.003517
2000-01-06   1.925393   0.641798    1.968551    0.656184
2000-01-07   0.565208   0.188403    0.032738    0.010913
2000-01-08   0.564129   0.188043   -0.759118   -0.253039
2000-01-09   2.048458   0.682819   -1.820537   -0.606846
2000-01-10   2.065750   0.688583    0.383357    0.127786

ใช้ฟังก์ชันต่างๆกับคอลัมน์ต่างๆของ Dataframe

import pandas as pd
import numpy as np
 
df = pd.DataFrame(np.random.randn(3, 4),
   index = pd.date_range('1/1/2000', periods=3),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r.aggregate({'A' : np.sum,'B' : np.mean})

มัน output มีดังนี้ -

A          B          C         D
2000-01-01  -1.575749  -1.018105   0.317797  0.545081
2000-01-02  -0.164917  -1.361068   0.258240  1.113091
2000-01-03   1.258111   1.037941  -0.047487  0.867371
                    A          B
2000-01-01  -1.575749  -1.018105
2000-01-02  -1.740666  -1.189587
2000-01-03  -0.482555  -0.447078

ข้อมูลที่ขาดหายไปเป็นปัญหาเสมอในสถานการณ์จริง พื้นที่ต่างๆเช่นการเรียนรู้ของเครื่องและการขุดข้อมูลต้องเผชิญกับปัญหาที่รุนแรงในด้านความแม่นยำของการคาดคะเนแบบจำลองเนื่องจากข้อมูลมีคุณภาพต่ำซึ่งเกิดจากค่าที่หายไป ในพื้นที่เหล่านี้การรักษามูลค่าที่ขาดหายไปเป็นจุดสำคัญในการทำให้แบบจำลองมีความแม่นยำและถูกต้องมากขึ้น

เมื่อใดและเหตุใดจึงไม่มีข้อมูล

ให้เราพิจารณาแบบสำรวจออนไลน์สำหรับผลิตภัณฑ์ หลายครั้งผู้คนไม่เปิดเผยข้อมูลทั้งหมดที่เกี่ยวข้องกับพวกเขา มีเพียงไม่กี่คนที่แบ่งปันประสบการณ์ของพวกเขา แต่พวกเขาใช้ผลิตภัณฑ์ไม่นานเท่าไหร่ มีเพียงไม่กี่คนที่แบ่งปันระยะเวลาที่ใช้ผลิตภัณฑ์ประสบการณ์ของพวกเขา แต่ไม่ใช่ข้อมูลติดต่อของพวกเขา ดังนั้นในบางส่วนหรืออีกวิธีหนึ่งของข้อมูลจึงมักจะขาดหายไปและเป็นเรื่องปกติมากในเวลาจริง

มาดูกันว่าเราจะจัดการกับค่าที่ขาดหายไปได้อย่างไร (พูดว่า NA หรือ NaN) โดยใช้ Pandas

# import the pandas library
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df

มัน output มีดังนี้ -

one        two      three
a   0.077988   0.476149   0.965836
b        NaN        NaN        NaN
c  -0.390208  -0.551605  -2.301950
d        NaN        NaN        NaN
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g        NaN        NaN        NaN
h   0.085100   0.532791   0.887415

เราได้สร้าง DataFrame โดยใช้การทำดัชนีใหม่โดยใช้ค่าที่ขาดหายไป ในผลลัพธ์NaN หมายถึง Not a Number.

ตรวจสอบค่าที่หายไป

เพื่อให้การตรวจจับค่าที่หายไปง่ายขึ้น (และข้ามประเภทอาร์เรย์ต่างๆ) Pandas จัดเตรียมไฟล์ isnull() และ notnull() ฟังก์ชันซึ่งเป็นวิธีการบนวัตถุ Series และ DataFrame ด้วย -

ตัวอย่าง 1

import pandas as pd
import numpy as np
 
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].isnull()

มัน output มีดังนี้ -

a  False
b  True
c  False
d  True
e  False
f  False
g  True
h  False
Name: one, dtype: bool

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].notnull()

มัน output มีดังนี้ -

a  True
b  False
c  True
d  False
e  True
f  True
g  False
h  True
Name: one, dtype: bool

การคำนวณที่ไม่มีข้อมูล

  • เมื่อรวมข้อมูล NA จะถือว่าเป็นศูนย์
  • หากข้อมูลเป็น NA ทั้งหมดผลลัพธ์จะเป็น NA

ตัวอย่าง 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].sum()

มัน output มีดังนี้ -

2.02357685917

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two'])
print df['one'].sum()

มัน output มีดังนี้ -

nan

การทำความสะอาด / การกรอกข้อมูลที่ขาดหายไป

นุ่นจัดเตรียมวิธีการต่างๆในการทำความสะอาดค่าที่หายไป ฟังก์ชัน Fillna สามารถ "กรอก" ค่า NA ด้วยข้อมูลที่ไม่ใช่ค่าว่างได้สองวิธีซึ่งเราได้แสดงไว้ในส่วนต่อไปนี้

แทนที่ NaN ด้วยค่าสเกลาร์

โปรแกรมต่อไปนี้จะแสดงวิธีแทนที่ "NaN" ด้วย "0"

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one',
'two', 'three'])

df = df.reindex(['a', 'b', 'c'])

print df
print ("NaN replaced with '0':")
print df.fillna(0)

มัน output มีดังนี้ -

one        two     three
a  -0.576991  -0.741695  0.553172
b        NaN        NaN       NaN
c   0.744328  -1.735166  1.749580

NaN replaced with '0':
         one        two     three
a  -0.576991  -0.741695  0.553172
b   0.000000   0.000000  0.000000
c   0.744328  -1.735166  1.749580

ที่นี่เรากำลังเติมค่าด้วยศูนย์ เราสามารถเติมค่าอื่น ๆ แทนได้

กรอก NA ไปข้างหน้าและข้างหลัง

การใช้แนวคิดของการเติมที่กล่าวถึงในบท ReIndexing เราจะเติมเต็มค่าที่ขาดหายไป

ซีเนียร์ No วิธีการและการดำเนินการ
1

pad/fill

วิธีการกรอกไปข้างหน้า

2

bfill/backfill

วิธีเติมย้อนหลัง

ตัวอย่าง 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df.fillna(method='pad')

มัน output มีดังนี้ -

one        two      three
a   0.077988   0.476149   0.965836
b   0.077988   0.476149   0.965836
c  -0.390208  -0.551605  -2.301950
d  -0.390208  -0.551605  -2.301950
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g  -0.930230  -0.670473   1.146615
h   0.085100   0.532791   0.887415

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df.fillna(method='backfill')

มัน output มีดังนี้ -

one        two      three
a   0.077988   0.476149   0.965836
b  -0.390208  -0.551605  -2.301950
c  -0.390208  -0.551605  -2.301950
d  -2.000303  -0.788201   1.510072
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g   0.085100   0.532791   0.887415
h   0.085100   0.532791   0.887415

ปล่อยค่าที่ขาดหายไป

หากคุณต้องการยกเว้นค่าที่ขาดหายไปให้ใช้ไฟล์ dropna ฟังก์ชั่นพร้อมกับ axisการโต้เถียง. ตามค่าเริ่มต้นแกน = 0 คือตามแถวซึ่งหมายความว่าหากค่าใด ๆ ภายในแถวเป็น NA จะไม่รวมทั้งแถว

ตัวอย่าง 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.dropna()

มัน output มีดังนี้ -

one        two      three
a   0.077988   0.476149   0.965836
c  -0.390208  -0.551605  -2.301950
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
h   0.085100   0.532791   0.887415

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.dropna(axis=1)

มัน output มีดังนี้ -

Empty DataFrame
Columns: [ ]
Index: [a, b, c, d, e, f, g, h]

แทนที่ค่าทั่วไปที่ขาดหายไป (หรือ)

หลายครั้งเราต้องแทนที่ค่าทั่วไปด้วยค่าเฉพาะบางค่า เราสามารถบรรลุสิ่งนี้ได้โดยใช้วิธีการแทนที่

การแทนที่ NA ด้วยค่าสเกลาร์เป็นลักษณะการทำงานที่เทียบเท่ากันของ fillna() ฟังก์ชัน

ตัวอย่าง 1

import pandas as pd
import numpy as np

df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]})

print df.replace({1000:10,2000:60})

มัน output มีดังนี้ -

one  two
0   10   10
1   20    0
2   30   30
3   40   40
4   50   50
5   60   60

ตัวอย่าง 2

import pandas as pd
import numpy as np

df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]})
print df.replace({1000:10,2000:60})

มัน output มีดังนี้ -

one  two
0   10   10
1   20    0
2   30   30
3   40   40
4   50   50
5   60   60

groupbyการดำเนินการเกี่ยวข้องกับการดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้บนวัตถุดั้งเดิม พวกเขาคือ -

  • Splitting วัตถุ

  • Applying ฟังก์ชัน

  • Combining ผลลัพธ์

ในหลาย ๆ สถานการณ์เราแบ่งข้อมูลออกเป็นชุดและใช้ฟังก์ชันบางอย่างกับแต่ละส่วนย่อย ในฟังก์ชันการใช้งานเราสามารถดำเนินการดังต่อไปนี้ -

  • Aggregation - คำนวณสถิติสรุป

  • Transformation - ดำเนินการเฉพาะบางกลุ่ม

  • Filtration - ทิ้งข้อมูลโดยมีเงื่อนไขบางประการ

ตอนนี้ให้เราสร้างวัตถุ DataFrame และดำเนินการทั้งหมดกับมัน -

#import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

print df

มัน output มีดังนี้ -

Points   Rank     Team   Year
0      876      1   Riders   2014
1      789      2   Riders   2015
2      863      2   Devils   2014
3      673      3   Devils   2015
4      741      3    Kings   2014
5      812      4    kings   2015
6      756      1    Kings   2016
7      788      1    Kings   2017
8      694      2   Riders   2016
9      701      4   Royals   2014
10     804      1   Royals   2015
11     690      2   Riders   2017

แยกข้อมูลออกเป็นกลุ่ม

วัตถุแพนด้าสามารถแบ่งออกเป็นวัตถุใดก็ได้ มีหลายวิธีในการแยกวัตถุเช่น -

  • obj.groupby('key')
  • obj.groupby(['key1','key2'])
  • obj.groupby(key,axis=1)

ตอนนี้ให้เราดูว่าสามารถใช้วัตถุการจัดกลุ่มกับวัตถุ DataFrame ได้อย่างไร

ตัวอย่าง

# import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

print df.groupby('Team')

มัน output มีดังนี้ -

<pandas.core.groupby.DataFrameGroupBy object at 0x7fa46a977e50>

ดูกลุ่ม

# import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

print df.groupby('Team').groups

มัน output มีดังนี้ -

{'Kings': Int64Index([4, 6, 7],      dtype='int64'),
'Devils': Int64Index([2, 3],         dtype='int64'),
'Riders': Int64Index([0, 1, 8, 11],  dtype='int64'),
'Royals': Int64Index([9, 10],        dtype='int64'),
'kings' : Int64Index([5],            dtype='int64')}

ตัวอย่าง

Group by มีหลายคอลัมน์ -

# import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

print df.groupby(['Team','Year']).groups

มัน output มีดังนี้ -

{('Kings', 2014): Int64Index([4], dtype='int64'),
 ('Royals', 2014): Int64Index([9], dtype='int64'),
 ('Riders', 2014): Int64Index([0], dtype='int64'),
 ('Riders', 2015): Int64Index([1], dtype='int64'),
 ('Kings', 2016): Int64Index([6], dtype='int64'),
 ('Riders', 2016): Int64Index([8], dtype='int64'),
 ('Riders', 2017): Int64Index([11], dtype='int64'),
 ('Devils', 2014): Int64Index([2], dtype='int64'),
 ('Devils', 2015): Int64Index([3], dtype='int64'),
 ('kings', 2015): Int64Index([5], dtype='int64'),
 ('Royals', 2015): Int64Index([10], dtype='int64'),
 ('Kings', 2017): Int64Index([7], dtype='int64')}

วนซ้ำผ่านกลุ่ม

กับ groupby วัตถุในมือเราสามารถวนซ้ำผ่านวัตถุที่คล้ายกับ itertools.obj

# import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

grouped = df.groupby('Year')

for name,group in grouped:
   print name
   print group

มัน output มีดังนี้ -

2014
   Points  Rank     Team   Year
0     876     1   Riders   2014
2     863     2   Devils   2014
4     741     3   Kings    2014
9     701     4   Royals   2014

2015
   Points  Rank     Team   Year
1     789     2   Riders   2015
3     673     3   Devils   2015
5     812     4    kings   2015
10    804     1   Royals   2015

2016
   Points  Rank     Team   Year
6     756     1    Kings   2016
8     694     2   Riders   2016

2017
   Points  Rank    Team   Year
7     788     1   Kings   2017
11    690     2  Riders   2017

โดยค่าเริ่มต้นไฟล์ groupby ออบเจ็กต์มีชื่อเลเบลเหมือนกับชื่อกลุ่ม

เลือกกลุ่ม

ใช้ get_group() วิธีการเราสามารถเลือกกลุ่มเดียว

# import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

grouped = df.groupby('Year')
print grouped.get_group(2014)

มัน output มีดังนี้ -

Points  Rank     Team    Year
0     876     1   Riders    2014
2     863     2   Devils    2014
4     741     3   Kings     2014
9     701     4   Royals    2014

การรวม

ฟังก์ชันรวมจะส่งคืนค่ารวมเดียวสำหรับแต่ละกลุ่ม เมื่อgroup by สร้างออบเจ็กต์การดำเนินการรวมหลายรายการสามารถดำเนินการกับข้อมูลที่จัดกลุ่มได้

สิ่งที่ชัดเจนคือการรวมผ่านการรวมหรือเทียบเท่า agg วิธีการ -

# import the pandas library
import pandas as pd
import numpy as np

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

grouped = df.groupby('Year')
print grouped['Points'].agg(np.mean)

มัน output มีดังนี้ -

Year
2014   795.25
2015   769.50
2016   725.00
2017   739.00
Name: Points, dtype: float64

อีกวิธีหนึ่งในการดูขนาดของแต่ละกลุ่มคือการใช้ฟังก์ชัน size () -

import pandas as pd
import numpy as np

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

Attribute Access in Python Pandas
grouped = df.groupby('Team')
print grouped.agg(np.size)

มัน output มีดังนี้ -

Points   Rank   Year
Team
Devils        2      2      2
Kings         3      3      3
Riders        4      4      4
Royals        2      2      2
kings         1      1      1

การใช้ฟังก์ชันการรวมหลายรายการพร้อมกัน

ด้วยซีรี่ส์ที่จัดกลุ่มคุณยังสามารถส่งไฟล์ list หรือ dict of functions เพื่อทำการรวมและสร้าง DataFrame เป็นเอาต์พุต -

# import the pandas library
import pandas as pd
import numpy as np

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

grouped = df.groupby('Team')
print grouped['Points'].agg([np.sum, np.mean, np.std])

มัน output มีดังนี้ -

Team      sum      mean          std
Devils   1536   768.000000   134.350288
Kings    2285   761.666667    24.006943
Riders   3049   762.250000    88.567771
Royals   1505   752.500000    72.831998
kings     812   812.000000          NaN

การเปลี่ยนแปลง

การแปลงในกลุ่มหรือคอลัมน์จะส่งคืนอ็อบเจ็กต์ที่จัดทำดัชนีขนาดเดียวกันกับที่ถูกจัดกลุ่ม ดังนั้นการแปลงควรส่งคืนผลลัพธ์ที่มีขนาดเท่ากับของกลุ่ม

# import the pandas library
import pandas as pd
import numpy as np

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

grouped = df.groupby('Team')
score = lambda x: (x - x.mean()) / x.std()*10
print grouped.transform(score)

มัน output มีดังนี้ -

Points        Rank        Year
0   12.843272  -15.000000  -11.618950
1   3.020286     5.000000   -3.872983
2   7.071068    -7.071068   -7.071068
3  -7.071068     7.071068    7.071068
4  -8.608621    11.547005  -10.910895
5        NaN          NaN         NaN
6  -2.360428    -5.773503    2.182179
7  10.969049    -5.773503    8.728716
8  -7.705963     5.000000    3.872983
9  -7.071068     7.071068   -7.071068
10  7.071068    -7.071068    7.071068
11 -8.157595     5.000000   11.618950

การกรอง

การกรองจะกรองข้อมูลตามเกณฑ์ที่กำหนดและส่งกลับข้อมูลชุดย่อย filter() ฟังก์ชันใช้เพื่อกรองข้อมูล

import pandas as pd
import numpy as np

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

print df.groupby('Team').filter(lambda x: len(x) >= 3)

มัน output มีดังนี้ -

Points  Rank     Team   Year
0      876     1   Riders   2014
1      789     2   Riders   2015
4      741     3   Kings    2014
6      756     1   Kings    2016
7      788     1   Kings    2017
8      694     2   Riders   2016
11     690     2   Riders   2017

ในเงื่อนไขตัวกรองด้านบนเราขอให้ส่งคืนทีมที่เข้าร่วม IPL ตั้งแต่สามครั้งขึ้นไป

Pandas มีการดำเนินการเข้าร่วมในหน่วยความจำที่มีคุณสมบัติครบถ้วนและมีประสิทธิภาพสูงโดยสำนวนคล้ายกับฐานข้อมูลเชิงสัมพันธ์เช่น SQL

นุ่นมีฟังก์ชั่นเดียว mergeเป็นจุดเริ่มต้นสำหรับฐานข้อมูลมาตรฐานทั้งหมดจะเข้าร่วมการดำเนินการระหว่างออบเจ็กต์ DataFrame -

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)

ที่นี่เราได้ใช้พารามิเตอร์ต่อไปนี้ -

  • left - วัตถุ DataFrame

  • right - วัตถุ DataFrame อื่น

  • on- คอลัมน์ (ชื่อ) เพื่อเข้าร่วม ต้องพบในวัตถุ DataFrame ทั้งซ้ายและขวา

  • left_on- คอลัมน์จาก DataFrame ด้านซ้ายเพื่อใช้เป็นคีย์ อาจเป็นชื่อคอลัมน์หรืออาร์เรย์ที่มีความยาวเท่ากับความยาวของ DataFrame

  • right_on- คอลัมน์จาก DataFrame ด้านขวาเพื่อใช้เป็นคีย์ อาจเป็นชื่อคอลัมน์หรืออาร์เรย์ที่มีความยาวเท่ากับความยาวของ DataFrame

  • left_index - ถ้า True,ใช้ดัชนี (ป้ายชื่อแถว) จาก DataFrame ด้านซ้ายเป็นคีย์การเข้าร่วม ในกรณีของ DataFrame ที่มี MultiIndex (ตามลำดับชั้น) จำนวนระดับจะต้องตรงกับจำนวนคีย์การเข้าร่วมจาก DataFrame ที่ถูกต้อง

  • right_index - การใช้งานเช่นเดียวกับ left_index สำหรับ DataFrame ที่เหมาะสม

  • how- หนึ่งใน 'ซ้าย', 'ขวา', 'ด้านนอก', 'ด้านใน' ค่าเริ่มต้นเป็นภายใน แต่ละวิธีได้อธิบายไว้ด้านล่าง

  • sort- จัดเรียง DataFrame ผลลัพธ์ตามคีย์เข้าร่วมตามลำดับศัพท์ ค่าเริ่มต้นเป็น True การตั้งค่าเป็น False จะช่วยเพิ่มประสิทธิภาพอย่างมากในหลาย ๆ กรณี

ตอนนี้ให้เราสร้าง DataFrames สองแบบที่แตกต่างกันและดำเนินการรวมเข้าด้วยกัน

# import the pandas library
import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame(
   {'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print left
print right

มัน output มีดังนี้ -

Name  id   subject_id
0   Alex   1         sub1
1    Amy   2         sub2
2  Allen   3         sub4
3  Alice   4         sub6
4  Ayoung  5         sub5

    Name  id   subject_id
0  Billy   1         sub2
1  Brian   2         sub4
2  Bran    3         sub3
3  Bryce   4         sub6
4  Betty   5         sub5

ผสานสอง DataFrames เข้ากับคีย์

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on='id')

มัน output มีดังนี้ -

Name_x   id  subject_id_x   Name_y   subject_id_y
0  Alex      1          sub1    Billy           sub2
1  Amy       2          sub2    Brian           sub4
2  Allen     3          sub4     Bran           sub3
3  Alice     4          sub6    Bryce           sub6
4  Ayoung    5          sub5    Betty           sub5

ผสานสอง DataFrames เข้ากับหลายปุ่ม

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on=['id','subject_id'])

มัน output มีดังนี้ -

Name_x   id   subject_id   Name_y
0    Alice    4         sub6    Bryce
1   Ayoung    5         sub5    Betty

ผสานโดยใช้อาร์กิวเมนต์ 'how'

howอาร์กิวเมนต์เพื่อผสานระบุวิธีการพิจารณาว่าจะรวมคีย์ใดในตารางผลลัพธ์ หากคีย์ผสมไม่ปรากฏในตารางด้านซ้ายหรือด้านขวาค่าในตารางที่เข้าร่วมจะเป็น NA

นี่คือบทสรุปของไฟล์ how ตัวเลือกและชื่อเทียบเท่า SQL -

วิธีผสาน เทียบเท่า SQL คำอธิบาย
ซ้าย ซ้ายนอกเข้าร่วม ใช้ปุ่มจากวัตถุด้านซ้าย
ขวา ขวาเข้าร่วม ใช้ปุ่มจากวัตถุที่ถูกต้อง
ด้านนอก เข้าร่วมเต็มรูปแบบจากภายนอก ใช้การรวมกันของคีย์
ด้านใน เข้าร่วมภายใน ใช้จุดตัดของคีย์

เข้าร่วมทางซ้าย

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='left')

มัน output มีดังนี้ -

Name_x   id_x   subject_id   Name_y   id_y
0     Alex      1         sub1      NaN    NaN
1      Amy      2         sub2    Billy    1.0
2    Allen      3         sub4    Brian    2.0
3    Alice      4         sub6    Bryce    4.0
4   Ayoung      5         sub5    Betty    5.0

เข้าร่วมขวา

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='right')

มัน output มีดังนี้ -

Name_x  id_x   subject_id   Name_y   id_y
0      Amy   2.0         sub2    Billy      1
1    Allen   3.0         sub4    Brian      2
2    Alice   4.0         sub6    Bryce      4
3   Ayoung   5.0         sub5    Betty      5
4      NaN   NaN         sub3     Bran      3

การเข้าร่วมภายนอก

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, how='outer', on='subject_id')

มัน output มีดังนี้ -

Name_x  id_x   subject_id   Name_y   id_y
0     Alex   1.0         sub1      NaN    NaN
1      Amy   2.0         sub2    Billy    1.0
2    Allen   3.0         sub4    Brian    2.0
3    Alice   4.0         sub6    Bryce    4.0
4   Ayoung   5.0         sub5    Betty    5.0
5      NaN   NaN         sub3     Bran    3.0

การเข้าร่วมภายใน

การเข้าร่วมจะดำเนินการในดัชนี เข้าร่วมการดำเนินการเพื่อเป็นเกียรติแก่วัตถุที่ถูกเรียกใช้ ดังนั้น,a.join(b) ไม่เท่ากับ b.join(a).

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='inner')

มัน output มีดังนี้ -

Name_x   id_x   subject_id   Name_y   id_y
0      Amy      2         sub2    Billy      1
1    Allen      3         sub4    Brian      2
2    Alice      4         sub6    Bryce      4
3   Ayoung      5         sub5    Betty      5

Pandas จัดเตรียมสิ่งอำนวยความสะดวกต่างๆเพื่อให้รวมเข้าด้วยกัน Series, DataFrameและ Panel วัตถุ

pd.concat(objs,axis=0,join='outer',join_axes=None,
ignore_index=False)
  • objs - นี่คือลำดับหรือการแมปของออบเจ็กต์ Series, DataFrame หรือ Panel

  • axis - {0, 1, ... } ค่าเริ่มต้น 0 นี่คือแกนที่จะเชื่อมต่อเข้าด้วยกัน

  • join- {'inner', 'outer'}, default 'outer' วิธีจัดการดัชนีบนแกนอื่น ๆ ด้านนอกสำหรับสหภาพและด้านในสำหรับสี่แยก

  • ignore_index- บูลีนค่าเริ่มต้น False ถ้าเป็นจริงอย่าใช้ค่าดัชนีบนแกนการเรียงต่อกัน แกนผลลัพธ์จะมีข้อความเป็น 0, ... , n - 1

  • join_axes- นี่คือรายการดัชนีวัตถุ ดัชนีเฉพาะที่จะใช้สำหรับแกนอื่น (n-1) แทนการใช้ตรรกะชุดภายใน / ภายนอก

การเชื่อมต่อวัตถุ

concatฟังก์ชั่นทำการยกของหนักทั้งหมดในการดำเนินการเชื่อมต่อตามแกน ให้เราสร้างวัตถุที่แตกต่างกันและทำการต่อกัน

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two])

มัน output มีดังนี้ -

Marks_scored     Name   subject_id
1             98     Alex         sub1
2             90      Amy         sub2
3             87    Allen         sub4
4             69    Alice         sub6
5             78   Ayoung         sub5
1             89    Billy         sub2
2             80    Brian         sub4
3             79     Bran         sub3
4             97    Bryce         sub6
5             88    Betty         sub5

สมมติว่าเราต้องการเชื่อมโยงคีย์เฉพาะกับแต่ละส่วนของ DataFrame ที่สับแล้ว เราสามารถทำได้โดยใช้keys อาร์กิวเมนต์ -

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two],keys=['x','y'])

มัน output มีดังนี้ -

x  1  98    Alex    sub1
   2  90    Amy     sub2
   3  87    Allen   sub4
   4  69    Alice   sub6
   5  78    Ayoung  sub5
y  1  89    Billy   sub2
   2  80    Brian   sub4
   3  79    Bran    sub3
   4  97    Bryce   sub6
   5  88    Betty   sub5

ดัชนีของผลลัพธ์ซ้ำกัน ดัชนีแต่ละรายการซ้ำกัน

หากอ็อบเจ็กต์ผลลัพธ์ต้องเป็นไปตามการจัดทำดัชนีของตัวเองให้ตั้งค่า ignore_index ถึง True.

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two],keys=['x','y'],ignore_index=True)

มัน output มีดังนี้ -

Marks_scored     Name    subject_id
0             98     Alex          sub1
1             90      Amy          sub2
2             87    Allen          sub4
3             69    Alice          sub6
4             78   Ayoung          sub5
5             89    Billy          sub2
6             80    Brian          sub4
7             79     Bran          sub3
8             97    Bryce          sub6
9             88    Betty          sub5

สังเกตดัชนีจะเปลี่ยนไปอย่างสมบูรณ์และคีย์จะถูกแทนที่ด้วย

หากต้องเพิ่มวัตถุสองชิ้นพร้อมกัน axis=1จากนั้นคอลัมน์ใหม่จะถูกต่อท้าย

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two],axis=1)

มัน output มีดังนี้ -

Marks_scored    Name  subject_id   Marks_scored    Name   subject_id
1           98      Alex      sub1         89         Billy         sub2
2           90       Amy      sub2         80         Brian         sub4
3           87     Allen      sub4         79          Bran         sub3
4           69     Alice      sub6         97         Bryce         sub6
5           78    Ayoung      sub5         88         Betty         sub5

การเชื่อมต่อโดยใช้ผนวก

ทางลัดที่มีประโยชน์ในการเชื่อมต่อคือวิธีการผนวกอินสแตนซ์บน Series และ DataFrame วิธีการเหล่านี้จริง concat พวกเขาเชื่อมต่อกันaxis=0คือดัชนี -

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print one.append(two)

มัน output มีดังนี้ -

Marks_scored    Name  subject_id
1           98      Alex      sub1
2           90       Amy      sub2
3           87     Allen      sub4
4           69     Alice      sub6
5           78    Ayoung      sub5
1           89     Billy      sub2
2           80     Brian      sub4
3           79      Bran      sub3
4           97     Bryce      sub6
5           88     Betty      sub5

append ฟังก์ชั่นสามารถใช้หลายวัตถุได้เช่นกัน -

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print one.append([two,one,two])

มัน output มีดังนี้ -

Marks_scored   Name    subject_id
1           98     Alex          sub1
2           90      Amy          sub2
3           87    Allen          sub4
4           69    Alice          sub6
5           78   Ayoung          sub5
1           89    Billy          sub2
2           80    Brian          sub4
3           79     Bran          sub3
4           97    Bryce          sub6
5           88    Betty          sub5
1           98     Alex          sub1
2           90      Amy          sub2
3           87    Allen          sub4
4           69    Alice          sub6
5           78   Ayoung          sub5
1           89    Billy          sub2
2           80    Brian          sub4
3           79     Bran          sub3
4           97    Bryce          sub6
5           88    Betty          sub5

อนุกรมเวลา

Pandas เป็นเครื่องมือที่มีประสิทธิภาพสำหรับเวลาทำงานกับข้อมูลอนุกรมเวลาโดยเฉพาะในภาคการเงิน ในขณะที่ทำงานกับข้อมูลอนุกรมเวลาเรามักพบสิ่งต่อไปนี้ -

  • การสร้างลำดับเวลา
  • แปลงอนุกรมเวลาเป็นความถี่ต่างๆ

Pandas มีชุดเครื่องมือที่ค่อนข้างกะทัดรัดและมีอยู่ในตัวสำหรับทำงานข้างต้น

รับเวลาปัจจุบัน

datetime.now() ให้วันที่และเวลาปัจจุบันแก่คุณ

import pandas as pd

print pd.datetime.now()

มัน output มีดังนี้ -

2017-05-11 06:10:13.393147

สร้าง TimeStamp

ข้อมูลที่ประทับเวลาเป็นข้อมูลชุดเวลาพื้นฐานที่สุดที่เชื่อมโยงค่ากับจุดในเวลา สำหรับวัตถุแพนด้านั้นหมายถึงการใช้แต้มให้ทันเวลา ลองดูตัวอย่าง -

import pandas as pd

print pd.Timestamp('2017-03-01')

มัน output มีดังนี้ -

2017-03-01 00:00:00

นอกจากนี้ยังสามารถแปลงเวลาจำนวนเต็มหรือจำนวนทศนิยมได้อีกด้วย หน่วยเริ่มต้นสำหรับสิ่งเหล่านี้คือนาโนวินาที (เนื่องจากเป็นวิธีการจัดเก็บการประทับเวลา) อย่างไรก็ตามมักจะถูกเก็บไว้ในหน่วยอื่นซึ่งสามารถระบุได้ ลองมาอีกตัวอย่างหนึ่ง

import pandas as pd

print pd.Timestamp(1587687255,unit='s')

มัน output มีดังนี้ -

2020-04-24 00:14:15

สร้างช่วงเวลา

import pandas as pd

print pd.date_range("11:00", "13:30", freq="30min").time

มัน output มีดังนี้ -

[datetime.time(11, 0) datetime.time(11, 30) datetime.time(12, 0)
datetime.time(12, 30) datetime.time(13, 0) datetime.time(13, 30)]

เปลี่ยนความถี่ของเวลา

import pandas as pd

print pd.date_range("11:00", "13:30", freq="H").time

มัน output มีดังนี้ -

[datetime.time(11, 0) datetime.time(12, 0) datetime.time(13, 0)]

การแปลงเป็นการประทับเวลา

ในการแปลงซีรีส์หรือวัตถุคล้ายรายการของออบเจ็กต์ที่มีลักษณะคล้ายวันที่ตัวอย่างเช่นสตริงยุคสมัยหรือส่วนผสมคุณสามารถใช้ to_datetimeฟังก์ชัน เมื่อผ่านไปสิ่งนี้จะส่งกลับ Series (ที่มีดัชนีเดียวกัน) ในขณะที่ alist-like ถูกแปลงเป็นไฟล์ DatetimeIndex. ดูตัวอย่างต่อไปนี้ -

import pandas as pd

print pd.to_datetime(pd.Series(['Jul 31, 2009','2010-01-10', None]))

มัน output มีดังนี้ -

0  2009-07-31
1  2010-01-10
2         NaT
dtype: datetime64[ns]

NaT หมายถึง Not a Time (เทียบเท่ากับ NaN)

ลองมาอีกตัวอย่างหนึ่ง

import pandas as pd

print pd.to_datetime(['2005/11/23', '2010.12.31', None])

มัน output มีดังนี้ -

DatetimeIndex(['2005-11-23', '2010-12-31', 'NaT'], dtype='datetime64[ns]', freq=None)

การขยายอนุกรมเวลาฟังก์ชันวันที่มีบทบาทสำคัญในการวิเคราะห์ข้อมูลทางการเงิน ในขณะที่ทำงานกับข้อมูล Date เรามักจะเจอสิ่งต่อไปนี้ -

  • การสร้างลำดับของวันที่
  • แปลงอนุกรมวันที่เป็นความถี่ต่างๆ

สร้างช่วงของวันที่

ใช้ date.range()ฟังก์ชั่นโดยการระบุช่วงเวลาและความถี่เราสามารถสร้างชุดวันที่ โดยค่าเริ่มต้นความถี่ของช่วงคือวัน

import pandas as pd

print pd.date_range('1/1/2011', periods=5)

มัน output มีดังนี้ -

DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'],
   dtype='datetime64[ns]', freq='D')

เปลี่ยนความถี่ของวันที่

import pandas as pd

print pd.date_range('1/1/2011', periods=5,freq='M')

มัน output มีดังนี้ -

DatetimeIndex(['2011-01-31', '2011-02-28', '2011-03-31', '2011-04-30', '2011-05-31'],
   dtype='datetime64[ns]', freq='M')

bdate_range

bdate_range () ย่อมาจากช่วงวันที่ของธุรกิจ ไม่เหมือนกับ date_range () คือไม่รวมวันเสาร์และวันอาทิตย์

import pandas as pd

print pd.date_range('1/1/2011', periods=5)

มัน output มีดังนี้ -

DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'],
   dtype='datetime64[ns]', freq='D')

สังเกตหลังจากวันที่ 3 มีนาคมวันที่ข้ามไปที่ 6 มีนาคมยกเว้นวันที่ 4 และ 5 เพียงตรวจสอบปฏิทินของคุณสำหรับวัน

ฟังก์ชั่นอำนวยความสะดวกเช่น date_range และ bdate_rangeใช้นามแฝงความถี่ที่หลากหลาย ความถี่เริ่มต้นสำหรับ date_range คือวันในปฏิทินในขณะที่ค่าเริ่มต้นสำหรับ bdate_range คือวันทำการ

import pandas as pd
start = pd.datetime(2011, 1, 1)
end = pd.datetime(2011, 1, 5)

print pd.date_range(start, end)

มัน output มีดังนี้ -

DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'],
   dtype='datetime64[ns]', freq='D')

นามแฝงตรงข้าม

ชื่อแทนสตริงจำนวนหนึ่งถูกกำหนดให้กับความถี่อนุกรมเวลาทั่วไปที่มีประโยชน์ เราจะอ้างถึงนามแฝงเหล่านี้ว่าเป็นนามแฝงออฟเซ็ต

นามแฝง คำอธิบาย นามแฝง คำอธิบาย
ความถี่ของวันทำการ BQS ความถี่ในการเริ่มต้นไตรมาสธุรกิจ
ความถี่ของวันในปฏิทิน ความถี่สิ้นปี (Year)
ความถี่รายสัปดาห์ ศ ธ ความถี่สิ้นปีของธุรกิจ
ความถี่สิ้นเดือน พื้นฐาน ความถี่ในการเริ่มต้นปีของธุรกิจ
SM ความถี่สิ้นเดือน BH ความถี่ของชั่วโมงทำการ
BM ความถี่สิ้นเดือนของธุรกิจ ความถี่รายชั่วโมง
นางสาว ความถี่ในการเริ่มต้นเดือน T นาที ความถี่ขั้นต่ำ
ข้อความ ความถี่เริ่มต้นครึ่งเดือนของ SMS ความถี่ที่สอง
BMS ความถี่ในการเริ่มต้นของเดือนธุรกิจ L, มิลลิวินาที มิลลิวินาที
ถาม ความถี่สิ้นไตรมาส คุณพวกเรา ไมโครวินาที
BQ ความถี่ในการสิ้นสุดของไตรมาสธุรกิจ นาโนวินาที
คำพูดคำจา ความถี่ในการเริ่มต้นไตรมาส

Timedeltas คือความแตกต่างของเวลาโดยแสดงเป็นหน่วยที่แตกต่างกันเช่นวันชั่วโมงนาทีวินาที สามารถเป็นได้ทั้งเชิงบวกและเชิงลบ

เราสามารถสร้างวัตถุ Timedelta โดยใช้อาร์กิวเมนต์ต่างๆดังที่แสดงด้านล่าง -

สตริง

ด้วยการส่งสตริงลิเทอรัลเราสามารถสร้างอ็อบเจกต์แบบกำหนดเวลาได้

import pandas as pd

print pd.Timedelta('2 days 2 hours 15 minutes 30 seconds')

มัน output มีดังนี้ -

2 days 02:15:30

จำนวนเต็ม

โดยการส่งค่าจำนวนเต็มไปกับหน่วยอาร์กิวเมนต์จะสร้างอ็อบเจกต์ Timedelta

import pandas as pd

print pd.Timedelta(6,unit='h')

มัน output มีดังนี้ -

0 days 06:00:00

ออฟเซ็ตข้อมูล

การชดเชยข้อมูลเช่น - สัปดาห์วันชั่วโมงนาทีวินาทีมิลลิวินาทีไมโครวินาทีนาโนวินาทีสามารถใช้ในการก่อสร้างได้เช่นกัน

import pandas as pd

print pd.Timedelta(days=2)

มัน output มีดังนี้ -

2 days 00:00:00

to_timedelta ()

โดยใช้ระดับบนสุด pd.to_timedeltaคุณสามารถแปลงสเกลาร์อาร์เรย์รายการหรือชุดข้อมูลจากรูปแบบ / ค่าเวลาที่รู้จักเป็นประเภท Timedelta มันจะสร้าง Series ถ้าอินพุตเป็น Series สเกลาร์ถ้าอินพุตเป็นเหมือนสเกลาร์มิฉะนั้นจะส่งออก aTimedeltaIndex.

import pandas as pd

print pd.Timedelta(days=2)

มัน output มีดังนี้ -

2 days 00:00:00

การดำเนินงาน

คุณสามารถใช้งาน Series / DataFrames และสร้าง timedelta64[ns] อนุกรมผ่านการลบบน datetime64[ns] ซีรี่ส์หรือการประทับเวลา

ตอนนี้ให้เราสร้าง DataFrame ด้วยวัตถุ Timedelta และวันที่เวลาและดำเนินการทางคณิตศาสตร์กับมัน -

import pandas as pd

s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))
td = pd.Series([ pd.Timedelta(days=i) for i in range(3) ])
df = pd.DataFrame(dict(A = s, B = td))

print df

มัน output มีดังนี้ -

A      B
0  2012-01-01 0 days
1  2012-01-02 1 days
2  2012-01-03 2 days

การดำเนินการเพิ่มเติม

import pandas as pd

s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))
td = pd.Series([ pd.Timedelta(days=i) for i in range(3) ])
df = pd.DataFrame(dict(A = s, B = td))
df['C']=df['A']+df['B']

print df

มัน output มีดังนี้ -

A      B          C
0 2012-01-01 0 days 2012-01-01
1 2012-01-02 1 days 2012-01-03
2 2012-01-03 2 days 2012-01-05

การลบ

import pandas as pd

s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))
td = pd.Series([ pd.Timedelta(days=i) for i in range(3) ])
df = pd.DataFrame(dict(A = s, B = td))
df['C']=df['A']+df['B']
df['D']=df['C']+df['B']

print df

มัน output มีดังนี้ -

A      B          C          D
0 2012-01-01 0 days 2012-01-01 2012-01-01
1 2012-01-02 1 days 2012-01-03 2012-01-04
2 2012-01-03 2 days 2012-01-05 2012-01-07

บ่อยครั้งในข้อมูลแบบเรียลไทม์จะรวมคอลัมน์ข้อความซึ่งซ้ำ ๆ กัน คุณลักษณะต่างๆเช่นเพศประเทศและรหัสมักจะซ้ำซากเสมอ นี่คือตัวอย่างสำหรับข้อมูลเชิงหมวดหมู่

ตัวแปรตามหมวดหมู่สามารถรับค่าที่เป็นไปได้ในจำนวนที่ จำกัด และโดยปกติแล้ว นอกจากความยาวคงที่แล้วข้อมูลเชิงหมวดหมู่อาจมีลำดับ แต่ไม่สามารถดำเนินการเชิงตัวเลขได้ หมวดหมู่เป็นชนิดข้อมูลแพนด้า

ประเภทข้อมูลที่เป็นหมวดหมู่มีประโยชน์ในกรณีต่อไปนี้ -

  • ตัวแปรสตริงประกอบด้วยค่าที่แตกต่างกันเพียงเล็กน้อย การแปลงตัวแปรสตริงดังกล่าวเป็นตัวแปรจัดหมวดหมู่จะช่วยประหยัดหน่วยความจำบางส่วน

  • ลำดับศัพท์ของตัวแปรไม่เหมือนกับลำดับตรรกะ (“ หนึ่ง”,“ สอง”,“ สาม”) โดยการแปลงเป็นหมวดหมู่และระบุลำดับในหมวดหมู่การเรียงลำดับและต่ำสุด / สูงสุดจะใช้ลำดับตรรกะแทนลำดับศัพท์

  • เพื่อเป็นสัญญาณไปยังไลบรารี python อื่น ๆ ว่าคอลัมน์นี้ควรได้รับการปฏิบัติเป็นตัวแปรจัดหมวดหมู่ (เช่นใช้วิธีการทางสถิติที่เหมาะสมหรือประเภทของพล็อต)

การสร้างวัตถุ

ออบเจ็กต์จัดหมวดหมู่สามารถสร้างได้หลายวิธี วิธีต่างๆได้อธิบายไว้ด้านล่าง -

ประเภท

โดยระบุ dtype เป็น "category" ในการสร้างวัตถุแพนด้า

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print s

มัน output มีดังนี้ -

0  a
1  b
2  c
3  a
dtype: category
Categories (3, object): [a, b, c]

จำนวนองค์ประกอบที่ส่งไปยังออบเจ็กต์ซีรีส์คือสี่ แต่หมวดหมู่มีเพียงสามเท่านั้น สังเกตสิ่งเดียวกันในหมวดเอาต์พุต

pd. ประเภท

การใช้ตัวสร้างแบ่งประเภทของแพนด้ามาตรฐานเราสามารถสร้างวัตถุประเภท

pandas.Categorical(values, categories, ordered)

ลองดูตัวอย่าง -

import pandas as pd

cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat

มัน output มีดังนี้ -

[a, b, c, a, b, c]
Categories (3, object): [a, b, c]

มีอีกตัวอย่างหนึ่ง -

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print cat

มัน output มีดังนี้ -

[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]

ที่นี่อาร์กิวเมนต์ที่สองหมายถึงหมวดหมู่ ดังนั้นค่าใด ๆ ที่ไม่มีอยู่ในหมวดหมู่จะถือว่าเป็นNaN.

ตอนนี้ดูตัวอย่างต่อไปนี้ -

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print cat

มัน output มีดังนี้ -

[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]

ตามเหตุผลคำสั่งหมายความว่า a มากกว่า b และ b มากกว่า c.

คำอธิบาย

ใช้ .describe() คำสั่งเกี่ยวกับข้อมูลหมวดหมู่เราได้ผลลัพธ์ที่คล้ายกันกับไฟล์ Series หรือ DataFrame ของ type สตริง

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})

print df.describe()
print df["cat"].describe()

มัน output มีดังนี้ -

cat s
count    3 3
unique   2 2
top      c c
freq     2 2
count     3
unique    2
top       c
freq      2
Name: cat, dtype: object

รับคุณสมบัติของหมวดหมู่

obj.cat.categories ใช้คำสั่งเพื่อรับไฟล์ categories of the object.

import pandas as pd
import numpy as np

s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print s.categories

มัน output มีดังนี้ -

Index([u'b', u'a', u'c'], dtype='object')

obj.ordered คำสั่งใช้เพื่อรับคำสั่งของวัตถุ

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print cat.ordered

มัน output มีดังนี้ -

False

ฟังก์ชันกลับมา false เนื่องจากเราไม่ได้ระบุคำสั่งซื้อใด ๆ

การเปลี่ยนชื่อหมวดหมู่

การเปลี่ยนชื่อหมวดหมู่ทำได้โดยการกำหนดค่าใหม่ให้กับไฟล์ series.cat.categoriesseries.cat.categories คุณสมบัติ

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s.cat.categories = ["Group %s" % g for g in s.cat.categories]
print s.cat.categories

มัน output มีดังนี้ -

Index([u'Group a', u'Group b', u'Group c'], dtype='object')

หมวดหมู่เริ่มต้น [a,b,c] ได้รับการอัปเดตโดยไฟล์ s.cat.categories คุณสมบัติของวัตถุ

เพิ่มหมวดหมู่ใหม่

การใช้วิธีการจัดหมวดหมู่ () หมวดหมู่ใหม่สามารถต่อท้ายได้

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print s.cat.categories

มัน output มีดังนี้ -

Index([u'a', u'b', u'c', 4], dtype='object')

การลบหมวดหมู่

ใช้ Categorical.remove_categories() วิธีการสามารถลบหมวดหมู่ที่ไม่ต้องการออกได้

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print ("Original object:")
print s

print ("After removal:")
print s.cat.remove_categories("a")

มัน output มีดังนี้ -

Original object:
0  a
1  b
2  c
3  a
dtype: category
Categories (3, object): [a, b, c]

After removal:
0  NaN
1  b
2  c
3  NaN
dtype: category
Categories (2, object): [b, c]

การเปรียบเทียบข้อมูลตามหมวดหมู่

การเปรียบเทียบข้อมูลเชิงหมวดหมู่กับวัตถุอื่นเป็นไปได้ในสามกรณี -

  • การเปรียบเทียบความเท่าเทียมกัน (== และ! =) กับวัตถุที่มีลักษณะคล้ายรายการ (list, Series, array, ... ) ที่มีความยาวเท่ากับข้อมูลหมวดหมู่

  • การเปรียบเทียบทั้งหมด (==,! =,>,> =, <และ <=) ของข้อมูลหมวดหมู่กับซีรีส์หมวดหมู่อื่นเมื่อเรียงลำดับ == True และหมวดหมู่จะเหมือนกัน

  • การเปรียบเทียบข้อมูลหมวดหมู่ทั้งหมดกับสเกลาร์

ดูตัวอย่างต่อไปนี้ -

import pandas as pd

cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)

print cat>cat1

มัน output มีดังนี้ -

0  False
1  False
2  True
dtype: bool

การพล็อตพื้นฐาน: พล็อต

ฟังก์ชั่นนี้บน Series และ DataFrame เป็นเพียง Wrapper แบบธรรมดารอบ ๆ ไฟล์ matplotlib libraries plot() วิธี.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('1/1/2000',
   periods=10), columns=list('ABCD'))

df.plot()

มัน output มีดังนี้ -

หากดัชนีประกอบด้วยวันที่ก็จะเรียก gct().autofmt_xdate() เพื่อจัดรูปแบบแกน x ตามที่แสดงในภาพประกอบด้านบน

เราสามารถพล็อตคอลัมน์หนึ่งกับคอลัมน์อื่นโดยใช้ x และ y คำหลัก

วิธีการพล็อตอนุญาตให้มีรูปแบบการลงจุดจำนวนหนึ่งนอกเหนือจากพล็อตบรรทัดเริ่มต้น วิธีการเหล่านี้สามารถให้เป็นอาร์กิวเมนต์คำหลักชนิดplot(). สิ่งเหล่านี้ ได้แก่ -

  • บาร์หรือบาร์สำหรับแปลงบาร์
  • ฮิสโตแกรม
  • กล่องสำหรับ boxplot
  • 'พื้นที่' สำหรับแปลงพื้นที่
  • 'กระจาย' สำหรับแปลงกระจาย

พล็อตบาร์

ตอนนี้ให้เราดูว่า Bar Plot คืออะไรโดยการสร้างขึ้นมา สามารถสร้างพล็อตแท่งได้ด้วยวิธีต่อไปนี้ -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')
df.plot.bar()

มัน output มีดังนี้ -

ในการสร้างพล็อตแท่งแบบเรียงซ้อน pass stacked=True -

import pandas as pd
df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')
df.plot.bar(stacked=True)

มัน output มีดังนี้ -

ในการรับพล็อตแท่งแนวนอนให้ใช้ barh วิธีการ -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')

df.plot.barh(stacked=True)

มัน output มีดังนี้ -

ฮิสโตแกรม

ฮิสโตแกรมสามารถพล็อตได้โดยใช้ plot.hist()วิธี. ระบุจำนวนถังขยะได้

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

df.plot.hist(bins=20)

มัน output มีดังนี้ -

ในการลงจุดฮิสโทแกรมที่แตกต่างกันสำหรับแต่ละคอลัมน์ให้ใช้รหัสต่อไปนี้ -

import pandas as pd
import numpy as np

df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

df.diff.hist(bins=20)

มัน output มีดังนี้ -

พล็อตกล่อง

Boxplot สามารถโทรออกได้ Series.box.plot() และ DataFrame.box.plot(), หรือ DataFrame.boxplot() เพื่อให้เห็นภาพการกระจายของค่าภายในแต่ละคอลัมน์

ตัวอย่างเช่นนี่คือบ็อกซ์พล็อตที่แสดงถึงการทดลอง 5 ครั้งจากการสังเกตการณ์ 10 ครั้งของตัวแปรสุ่มที่เหมือนกันใน [0,1)

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box()

มัน output มีดังนี้ -

พล็อตพื้นที่

สามารถสร้างพล็อตพื้นที่ได้โดยใช้ Series.plot.area() หรือ DataFrame.plot.area() วิธีการ

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()

มัน output มีดังนี้ -

พล็อตกระจาย

สามารถสร้างพล็อตการกระจายโดยใช้ไฟล์ DataFrame.plot.scatter() วิธีการ

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x='a', y='b')

มัน output มีดังนี้ -

แผนภูมิวงกลม

แผนภูมิวงกลมสามารถสร้างได้โดยใช้ DataFrame.plot.pie() วิธี.

import pandas as pd
import numpy as np

df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x'])
df.plot.pie(subplots=True)

มัน output มีดังนี้ -

Pandas I/O API เป็นชุดของฟังก์ชันผู้อ่านระดับบนสุดที่เข้าถึงได้เช่น pd.read_csv() ที่มักจะส่งคืนวัตถุนุ่น

ฟังก์ชันม้าสองตัวสำหรับการอ่านไฟล์ข้อความ (หรือไฟล์แบบแบน) คือ read_csv() และ read_table(). ทั้งสองใช้รหัสการแยกวิเคราะห์เดียวกันเพื่อแปลงข้อมูลตารางเป็นไฟล์DataFrame วัตถุ -

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',
names=None, index_col=None, usecols=None

pandas.read_csv(filepath_or_buffer, sep='\t', delimiter=None, header='infer',
names=None, index_col=None, usecols=None

นี่คือวิธีการ csv ข้อมูลไฟล์ดูเหมือน -

S.No,Name,Age,City,Salary
1,Tom,28,Toronto,20000
2,Lee,32,HongKong,3000
3,Steven,43,Bay Area,8300
4,Ram,38,Hyderabad,3900

บันทึกข้อมูลนี้เป็นไฟล์ temp.csv และดำเนินการกับมัน

S.No,Name,Age,City,Salary
1,Tom,28,Toronto,20000
2,Lee,32,HongKong,3000
3,Steven,43,Bay Area,8300
4,Ram,38,Hyderabad,3900

บันทึกข้อมูลนี้เป็นไฟล์ temp.csv และดำเนินการกับมัน

read.csv

read.csv อ่านข้อมูลจากไฟล์ csv และสร้างออบเจ็กต์ DataFrame

import pandas as pd

df=pd.read_csv("temp.csv")
print df

มัน output มีดังนี้ -

S.No     Name   Age       City   Salary
0     1      Tom    28    Toronto    20000
1     2      Lee    32   HongKong     3000
2     3   Steven    43   Bay Area     8300
3     4      Ram    38  Hyderabad     3900

ดัชนีที่กำหนดเอง

สิ่งนี้ระบุคอลัมน์ในไฟล์ csv เพื่อปรับแต่งดัชนีโดยใช้ index_col.

import pandas as pd

df=pd.read_csv("temp.csv",index_col=['S.No'])
print df

มัน output มีดังนี้ -

S.No   Name   Age       City   Salary
1       Tom    28    Toronto    20000
2       Lee    32   HongKong     3000
3    Steven    43   Bay Area     8300
4       Ram    38  Hyderabad     3900

ตัวแปลง

dtype ของคอลัมน์สามารถส่งผ่านเป็นคำสั่ง

import pandas as pd

df = pd.read_csv("temp.csv", dtype={'Salary': np.float64})
print df.dtypes

มัน output มีดังนี้ -

S.No       int64
Name      object
Age        int64
City      object
Salary   float64
dtype: object

โดยค่าเริ่มต้นไฟล์ dtype ของคอลัมน์เงินเดือนคือ intแต่ผลลัพธ์แสดงให้เห็นว่าเป็น float เนื่องจากเราได้ระบุประเภทไว้อย่างชัดเจน

ดังนั้นข้อมูลจึงดูเหมือนลอย -

S.No   Name   Age      City    Salary
0   1     Tom   28    Toronto   20000.0
1   2     Lee   32   HongKong    3000.0
2   3  Steven   43   Bay Area    8300.0
3   4     Ram   38  Hyderabad    3900.0

header_names

ระบุชื่อของส่วนหัวโดยใช้อาร์กิวเมนต์ names

import pandas as pd
 
df=pd.read_csv("temp.csv", names=['a', 'b', 'c','d','e'])
print df

มัน output มีดังนี้ -

a        b    c           d        e
0   S.No     Name   Age       City   Salary
1      1      Tom   28     Toronto    20000
2      2      Lee   32    HongKong     3000
3      3   Steven   43    Bay Area     8300
4      4      Ram   38   Hyderabad     3900

สังเกตชื่อส่วนหัวจะต่อท้ายด้วยชื่อที่กำหนดเอง แต่ส่วนหัวในไฟล์ยังไม่ถูกกำจัด ตอนนี้เราใช้อาร์กิวเมนต์ส่วนหัวเพื่อลบออก

หากส่วนหัวอยู่ในแถวอื่นที่ไม่ใช่ส่วนแรกให้ส่งหมายเลขแถวไปที่ส่วนหัว การดำเนินการนี้จะข้ามแถวก่อนหน้า

import pandas as pd 

df=pd.read_csv("temp.csv",names=['a','b','c','d','e'],header=0)
print df

มัน output มีดังนี้ -

a        b    c           d        e
0  S.No     Name   Age       City   Salary
1     1      Tom   28     Toronto    20000
2     2      Lee   32    HongKong     3000
3     3   Steven   43    Bay Area     8300
4     4      Ram   38   Hyderabad     3900

ข้าม

การข้ามเส้นข้ามจำนวนแถวที่ระบุ

import pandas as pd

df=pd.read_csv("temp.csv", skiprows=2)
print df

มัน output มีดังนี้ -

2      Lee   32    HongKong   3000
0   3   Steven   43    Bay Area   8300
1   4      Ram   38   Hyderabad   3900

วัตถุกระจัดกระจายจะถูก "บีบอัด" เมื่อข้อมูลใด ๆ ที่ตรงกับค่าเฉพาะ (NaN / ค่าที่ขาดหายไปแม้ว่าจะสามารถเลือกค่าใดก็ได้) อ็อบเจ็กต์ SparseIndex พิเศษจะติดตามโดยที่ข้อมูลถูก "กระจัดกระจาย" สิ่งนี้จะเข้าท่ากว่าในตัวอย่าง โครงสร้างข้อมูล Pandas มาตรฐานทั้งหมดใช้ไฟล์to_sparse วิธีการ -

import pandas as pd
import numpy as np

ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.to_sparse()
print sts

มัน output มีดังนี้ -

0   -0.810497
1   -1.419954
2         NaN
3         NaN
4         NaN
5         NaN
6         NaN
7         NaN
8    0.439240
9   -1.095910
dtype: float64
BlockIndex
Block locations: array([0, 8], dtype=int32)
Block lengths: array([2, 2], dtype=int32)

วัตถุกระจัดกระจายมีอยู่ด้วยเหตุผลด้านประสิทธิภาพของหน่วยความจำ

ตอนนี้สมมติว่าคุณมี NA DataFrame ขนาดใหญ่และรันโค้ดต่อไปนี้ -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10000, 4))
df.ix[:9998] = np.nan
sdf = df.to_sparse()

print sdf.density

มัน output มีดังนี้ -

0.0001

วัตถุที่กระจัดกระจายสามารถแปลงกลับเป็นรูปแบบมาตรฐานหนาแน่นได้โดยการโทร to_dense -

import pandas as pd
import numpy as np
ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.to_sparse()
print sts.to_dense()

มัน output มีดังนี้ -

0   -0.810497
1   -1.419954
2         NaN
3         NaN
4         NaN
5         NaN
6         NaN
7         NaN
8    0.439240
9   -1.095910
dtype: float64

Dtypes เบาบาง

ข้อมูลกระจัดกระจายควรมี dtype เดียวกันกับการแสดงข้อมูลที่หนาแน่น ปัจจุบันfloat64, int64 และ booldtypesได้รับการสนับสนุน ขึ้นอยู่กับต้นฉบับdtype, fill_value default การเปลี่ยนแปลง -

  • float64 - np.nan

  • int64 - 0

  • bool - เท็จ

ให้เรารันโค้ดต่อไปนี้เพื่อให้เข้าใจตรงกัน -

import pandas as pd
import numpy as np

s = pd.Series([1, np.nan, np.nan])
print s

s.to_sparse()
print s

มัน output มีดังนี้ -

0   1.0
1   NaN
2   NaN
dtype: float64

0   1.0
1   NaN
2   NaN
dtype: float64

Caveats หมายถึงคำเตือนและ gotcha หมายถึงปัญหาที่มองไม่เห็น

การใช้คำสั่ง If / Truth กับนุ่น

หมีแพนด้าทำตามแบบแผนของการเพิ่มข้อผิดพลาดเมื่อคุณพยายามแปลงบางอย่างเป็นไฟล์ bool. สิ่งนี้เกิดขึ้นในไฟล์if หรือ when โดยใช้การดำเนินการบูลีนและ or, หรือ not. ยังไม่ชัดเจนว่าผลควรเป็นอย่างไร มันควรจะเป็น True เพราะมันไม่ใช่ Zerolength? เท็จเพราะมีค่าเท็จ? มันไม่ชัดเจนดังนั้นนุ่นจึงยกกValueError -

import pandas as pd

if pd.Series([False, True, False]):
   print 'I am True'

มัน output มีดังนี้ -

ValueError: The truth value of a Series is ambiguous. 
Use a.empty, a.bool() a.item(),a.any() or a.all().

ใน ifสภาพยังไม่ชัดเจนว่าจะทำอย่างไรกับมัน ข้อผิดพลาดเป็นการชี้นำว่าจะใช้ไฟล์None หรือ any of those.

import pandas as pd

if pd.Series([False, True, False]).any():
   print("I am any")

มัน output มีดังนี้ -

I am any

ในการประเมินวัตถุแพนด้าองค์ประกอบเดียวในบริบทบูลีนให้ใช้วิธีการ .bool() -

import pandas as pd

print pd.Series([True]).bool()

มัน output มีดังนี้ -

True

Bitwise บูลีน

ตัวดำเนินการ Bitwise Boolean เช่น == และ != จะส่งคืนชุดบูลีนซึ่งเป็นสิ่งที่จำเป็นเกือบตลอดเวลา

import pandas as pd

s = pd.Series(range(5))
print s==4

มัน output มีดังนี้ -

0 False
1 False
2 False
3 False
4 True
dtype: bool

isin การทำงาน

สิ่งนี้ส่งคืนอนุกรมบูลีนที่แสดงว่าแต่ละองค์ประกอบในซีรี่ส์มีอยู่ในลำดับค่าที่ส่งผ่านหรือไม่

import pandas as pd

s = pd.Series(list('abc'))
s = s.isin(['a', 'c', 'e'])
print s

มัน output มีดังนี้ -

0 True
1 False
2 True
dtype: bool

Reindexing vs ix Gotcha

ผู้ใช้หลายคนจะพบว่าตัวเองกำลังใช้ไฟล์ ix indexing capabilities เป็นวิธีที่กระชับในการเลือกข้อมูลจากวัตถุแพนด้า -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three',
'four'],index=list('abcdef'))

print df
print df.ix[['b', 'c', 'e']]

มัน output มีดังนี้ -

one        two      three       four
a   -1.582025   1.335773   0.961417  -1.272084
b    1.461512   0.111372  -0.072225   0.553058
c   -1.240671   0.762185   1.511936  -0.630920
d   -2.380648  -0.029981   0.196489   0.531714
e    1.846746   0.148149   0.275398  -0.244559
f   -1.842662  -0.933195   2.303949   0.677641

          one        two      three       four
b    1.461512   0.111372  -0.072225   0.553058
c   -1.240671   0.762185   1.511936  -0.630920
e    1.846746   0.148149   0.275398  -0.244559

แน่นอนว่านี่คือเทียบเท่าอย่างสมบูรณ์ในกรณีนี้กับการใช้ไฟล์ reindex วิธีการ -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three',
'four'],index=list('abcdef'))

print df
print df.reindex(['b', 'c', 'e'])

มัน output มีดังนี้ -

one        two      three       four
a    1.639081   1.369838   0.261287  -1.662003
b   -0.173359   0.242447  -0.494384   0.346882
c   -0.106411   0.623568   0.282401  -0.916361
d   -1.078791  -0.612607  -0.897289  -1.146893
e    0.465215   1.552873  -1.841959   0.329404
f    0.966022  -0.190077   1.324247   0.678064

          one        two      three       four
b   -0.173359   0.242447  -0.494384   0.346882
c   -0.106411   0.623568   0.282401  -0.916361
e    0.465215   1.552873  -1.841959   0.329404

บางคนอาจสรุปว่า ix และ reindexเทียบเท่า 100% ตามนี้ นี่เป็นจริงยกเว้นในกรณีของการสร้างดัชนีจำนวนเต็ม ตัวอย่างเช่นการดำเนินการข้างต้นสามารถแสดงเป็น -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three',
'four'],index=list('abcdef'))

print df
print df.ix[[1, 2, 4]]
print df.reindex([1, 2, 4])

มัน output มีดังนี้ -

one        two      three       four
a   -1.015695  -0.553847   1.106235  -0.784460
b   -0.527398  -0.518198  -0.710546  -0.512036
c   -0.842803  -1.050374   0.787146   0.205147
d   -1.238016  -0.749554  -0.547470  -0.029045
e   -0.056788   1.063999  -0.767220   0.212476
f    1.139714   0.036159   0.201912   0.710119

          one        two      three       four
b   -0.527398  -0.518198  -0.710546  -0.512036
c   -0.842803  -1.050374   0.787146   0.205147
e   -0.056788   1.063999  -0.767220   0.212476

    one  two  three  four
1   NaN  NaN    NaN   NaN
2   NaN  NaN    NaN   NaN
4   NaN  NaN    NaN   NaN

สิ่งสำคัญคือต้องจำไว้ว่า reindex is strict label indexing only. สิ่งนี้สามารถนำไปสู่ผลลัพธ์ที่น่าประหลาดใจบางอย่างในกรณีทางพยาธิวิทยาที่ดัชนีมีทั้งจำนวนเต็มและสตริง

เนื่องจากผู้มีโอกาสเป็นผู้ใช้ Pandas หลายคนมีความคุ้นเคยกับ SQL อยู่บ้างหน้านี้จึงมีขึ้นเพื่อให้ตัวอย่างการดำเนินการต่างๆของ SQL โดยใช้แพนด้า

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
print tips.head()

มัน output มีดังนี้ -

total_bill   tip      sex  smoker  day     time  size
0        16.99  1.01   Female      No  Sun  Dinner      2
1        10.34  1.66     Male      No  Sun  Dinner      3
2        21.01  3.50     Male      No  Sun  Dinner      3
3        23.68  3.31     Male      No  Sun  Dinner      2
4        24.59  3.61   Female      No  Sun  Dinner      4

เลือก

ใน SQL การเลือกทำได้โดยใช้รายการคอลัมน์ที่คั่นด้วยจุลภาคที่คุณเลือก (หรือ a * เพื่อเลือกคอลัมน์ทั้งหมด) -

SELECT total_bill, tip, smoker, time
FROM tips
LIMIT 5;

ด้วย Pandas การเลือกคอลัมน์ทำได้โดยส่งรายชื่อคอลัมน์ไปยัง DataFrame ของคุณ -

tips[['total_bill', 'tip', 'smoker', 'time']].head(5)

ตรวจสอบโปรแกรมเต็ม -

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'
 
tips=pd.read_csv(url)
print tips[['total_bill', 'tip', 'smoker', 'time']].head(5)

มัน output มีดังนี้ -

total_bill   tip  smoker     time
0       16.99  1.01      No   Dinner
1       10.34  1.66      No   Dinner
2       21.01  3.50      No   Dinner
3       23.68  3.31      No   Dinner
4       24.59  3.61      No   Dinner

การเรียก DataFrame โดยไม่มีรายชื่อคอลัมน์จะแสดงคอลัมน์ทั้งหมด (คล้ายกับ SQL ของ *)

ที่ไหน

การกรองใน SQL ทำได้ผ่าน WHERE clause

SELECT * FROM tips WHERE time = 'Dinner' LIMIT 5;

DataFrames สามารถกรองได้หลายวิธี ใช้งานง่ายที่สุดซึ่งใช้การสร้างดัชนีแบบบูลีน

tips[tips['time'] == 'Dinner'].head(5)

ตรวจสอบโปรแกรมเต็ม -

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
print tips[tips['time'] == 'Dinner'].head(5)

มัน output มีดังนี้ -

total_bill   tip      sex  smoker  day    time  size
0       16.99  1.01   Female     No   Sun  Dinner    2
1       10.34  1.66     Male     No   Sun  Dinner    3
2       21.01  3.50     Male     No   Sun  Dinner    3
3       23.68  3.31     Male     No   Sun  Dinner    2
4       24.59  3.61   Female     No   Sun  Dinner    4

ข้อความข้างต้นส่งชุดของวัตถุจริง / เท็จไปยัง DataFrame โดยส่งคืนแถวทั้งหมดด้วย True

GroupBy

การดำเนินการนี้ดึงจำนวนเรกคอร์ดในแต่ละกลุ่มตลอดทั้งชุดข้อมูล ตัวอย่างเช่นข้อความค้นหาเรียกจำนวนเคล็ดลับที่เหลือจากเพศ -

SELECT sex, count(*)
FROM tips
GROUP BY sex;

เทียบเท่ากับนุ่นจะเป็น -

tips.groupby('sex').size()

ตรวจสอบโปรแกรมเต็ม -

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
print tips.groupby('sex').size()

มัน output มีดังนี้ -

sex
Female   87
Male    157
dtype: int64

N แถวบนสุด

SQL ส่งคืนไฟล์ top n rows โดยใช้ LIMIT -

SELECT * FROM tips
LIMIT 5 ;

เทียบเท่ากับนุ่นจะเป็น -

tips.head(5)

ตรวจสอบตัวอย่างเต็ม -

import pandas as pd

url = 'https://raw.github.com/pandas-dev/pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
tips = tips[['smoker', 'day', 'time']].head(5)
print tips

มัน output มีดังนี้ -

smoker   day     time
0      No   Sun   Dinner
1      No   Sun   Dinner
2      No   Sun   Dinner
3      No   Sun   Dinner
4      No   Sun   Dinner

นี่คือการใช้งานพื้นฐานบางอย่างที่เราเปรียบเทียบซึ่งเราได้เรียนรู้ในบทก่อนหน้าของห้องสมุดแพนด้า