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
นี่คือการใช้งานพื้นฐานบางอย่างที่เราเปรียบเทียบซึ่งเราได้เรียนรู้ในบทก่อนหน้าของห้องสมุดแพนด้า