SQL Operations
SQL- ல் உள்ள limit, group by, order by, joins, where condition போன்ற பல்வேறு கட்டளைகளுக்கு இணையான கட்டளைகள் pandas-லும் உள்ளன. இவற்றைப் பற்றியெல்லாம் இப்பகுதியில் காண்போம்.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
df = pd.read_csv("./girls.csv") | |
print (df) | |
print (df.head()) | |
print (df.head(2)) | |
print (df[df['place'] == 'Hyderabad']) | |
df1 = df.groupby('place') | |
print (df1.size()) | |
print (df1.groups) | |
print (df1.get_group('Delhi')) | |
print (df1.filter(lambda x: len(x) >= 3)) | |
for i, j in df1: | |
print (i) | |
print (j) | |
df2 = pd.read_csv("./boys.csv") | |
print (df2) | |
print (pd.concat([df,df2])) | |
print (df.append(df2)) | |
print (pd.merge(df,df2,on='place')) | |
print (pd.merge(df,df2,on='place',how='right')) # left, outer, inner | |
print (df2.sort_index(ascending=False)) | |
print (df2.sort_values(by='age')) |
மேலே பயன்படுத்திய அதே csv- ஐ இங்கும் பயன்படுத்திக் கொள்வோம்.
df = pd.read_csv(“./girls.csv”)
print (df)
id fname lname age desig no place
0 1 Nithya Duraisamy 31 Manager 9587412536 Hyderabad
1 2 Nandhini Babu 28 AstManager 9848022338 Delhi
2 3 Madhuri Nathan 51 VP 9848022339 Delhi
3 4 Kavitha Manoharan 45 AVP 9848022330 Hyderabad
4 5 Vijaya Kandasamy 40 AVP 9848022336 Noida
5 6 Aarthi Raj 22 AstManager 9848022335 Chennai
6 7 Lavanya Sankar 23 SrEngineer 9848022334 Chennai
7 8 Meena Baskar 56 VP 9848022333 Hyderabad
8 9 Gayathri Ragu 36 Engineer 9848022333 Chennai
9 10 Kavitha Manoharan 49 AVP 9848022336 Noida
Limit clause
அதனை பிரிண்ட் செய்யும்போது ஒருசில ரெகார்ட்ஸை மட்டும் வெளிப்படுத்த விரும்பினால் head() – ஐப் பயன்படுத்தலாம்.
print (df.head())
id fname lname age desig no place
0 1 Nithya Duraisamy 31 Manager 9587412536 Hyderabad
1 2 Nandhini Babu 28 AstManager 9848022338 Delhi
2 3 Madhuri Nathan 51 VP 9848022339 Delhi
3 4 Kavitha Manoharan 45 AVP 9848022330 Hyderabad
4 5 Vijaya Kandasamy 40 AVP 9848022336 Noida
print (df.head(2))
id fname lname age desig no place
0 1 Nithya Duraisamy 31 Manager 9587412536 Hyderabad
1 2 Nandhini Babu 28 AstManager 9848022338 Delhi
Where condition
ஒரு condition- ஐக் கொடுத்து அதில் பொருந்தும் தரவுகளை மட்டும் எடுக்க விரும்பினால் அது பின்வருமாறு அமையும். இங்கு ஹைதராபாத்தில் இருக்கும் நபர்களின் விவரங்கள் மட்டும் எடுத்துக் காட்டப்பட்டுள்ளது.
print (df[df[‘place’] == ‘Hyderabad’])
id fname lname age desig no place
0 1 Nithya Duraisamy 31 Manager 9587412536 Hyderabad
3 4 Kavitha Manoharan 45 AVP 9848022330 Hyderabad
7 8 Meena Baskar 56 VP 9848022333 Hyderabad
Grouping
நகர வாரியாக நபர்களை குழுக்களாகப் பிரிக்க groupby () பயன்படுகிறது. அவ்வாறு பிரித்து df1 எனும் பெயரில் சேமிக்கிறது. அதன் மீது செயல்படும் size () என்பது என்னென்ன குழுக்களில் எவ்வளவு records உள்ளது என்பதை வெளிப்படுத்தி உள்ளது.
df1 = df.groupby(‘place’)
print (df1.size())
place
Chennai 3
Delhi 2
Hyderabad 3
Noida 2
dtype: int64
df1 –ன் மீது செயல்படும் groups என்பது குழுக்களின் பெயர், அதில் சேமிக்கப்பட்டுள்ள row-ன் இன்டெக்ஸ் எண், அவைகளின் தரவு வகை ஆகியவற்றை வெளிப்படுத்தும்.
print (df1.groups)
{‘Chennai’: Int64Index([5, 6, 8], dtype=’int64′), ‘Delhi’: Int64Index([1, 2], dtype=’int64′), ‘Hyderabad’: Int64
Index([0, 3, 7], dtype=’int64′), ‘Noida’: Int64Index([4, 9], dtype=’int64′)}
ஏதேனும் ஒரு குழுவின் பெயரைக் கொடுத்து அதில் சேமிக்கப்பட்டுள்ள விவரங்களை மட்டும் எடுக்க விரும்பினால் get_group() பயன்படும்.
print (df1.get_group(‘Delhi’))
id fname lname age desig no place
1 2 Nandhini Babu 28 AstManager 9848022338 Delhi
2 3 Madhuri Nathan 51 VP 9848022339 Delhi
எந்த குழுவில் மூன்று அல்லது அதற்கும் மேற்பட்ட தகவல்கள் உள்ளதோ, அதை மட்டும் filter செய்து பார்க்க விரும்பினால் அது பின்வருமாறு.
print (df1.filter(lambda x: len(x) >= 3))
id fname lname age desig no place
0 1 Nithya Duraisamy 31 Manager 9587412536 Hyderabad
3 4 Kavitha Manoharan 45 AVP 9848022330 Hyderabad
5 6 Aarthi Raj 22 AstManager 9848022335 Chennai
6 7 Lavanya Sankar 23 SrEngineer 9848022334 Chennai
7 8 Meena Baskar 56 VP 9848022333 Hyderabad
8 9 Gayathri Ragu 36 Engineer 9848022333 Chennai
தரவுகளைக் குழுக்களாகப் பிரித்த பின் (df1), குழுவின் பெயர், அதில் சேமிக்கப்பட்டுள்ள விவரங்கள் ஆகியவற்றை சுழற்சி யாக வெளிப்படுத்த விரும்பினால் அதற்கான for loop பின்வருமாறு அமையும்.
for i, j in df1:
print (i)
print (j)
Chennai
id fname lname age desig no place
5 6 Aarthi Raj 22 AstManager 9848022335 Chennai
6 7 Lavanya Sankar 23 SrEngineer 9848022334 Chennai
8 9 Gayathri Ragu 36 Engineer 9848022333 Chennai
Delhi
id fname lname age desig no place
1 2 Nandhini Babu 28 AstManager 9848022338 Delhi
2 3 Madhuri Nathan 51 VP 9848022339 Delhi
Hyderabad
id fname lname age desig no place
0 1 Nithya Duraisamy 31 Manager 9587412536 Hyderabad
3 4 Kavitha Manoharan 45 AVP 9848022330 Hyderabad
7 8 Meena Baskar 56 VP 9848022333 Hyderabad
Noida
id fname lname age desig no place
4 5 Vijaya Kandasamy 40 AVP 9848022336 Noida
9 10 Kavitha Manoharan 49 AVP 9848022336 Noida
Combining data frames
அடுத்ததாக இன்னொரு டேட்டாஃப்பிரேமை உருவாக்கி, இரண்டையும் இணைத்துப் பயன்படுத்துவதில் உள்ள வழிமுறைகளை இப்பகுதியில் காணலாம்.
df2 = pd.read_csv(“./boys.csv”)
print (df2)
id fname lname age desig no place
0 11 Mahesh Muthu 38 SrManager 9853526341 Chennai
1 12 Elango Raman 25 Assistant 9865637872 Mumbai
2 13 Kadiresan kesavan 41 VP 9746325437 Delhi
3 14 Sundar Paul 48 AVP 9947362222 Thane
4 15 Kumar Ramasamy 30 AVP 9346212333 Noida
print (pd.concat([df,df2]))
id fname lname age desig no place
0 1 Nithya Duraisamy 31 Manager 9587412536 Hyderabad
1 2 Nandhini Babu 28 AstManager 9848022338 Delhi
2 3 Madhuri Nathan 51 VP 9848022339 Delhi
3 4 Kavitha Manoharan 45 AVP 9848022330 Hyderabad
4 5 Vijaya Kandasamy 40 AVP 9848022336 Noida
5 6 Aarthi Raj 22 AstManager 9848022335 Chennai
6 7 Lavanya Sankar 23 SrEngineer 9848022334 Chennai
7 8 Meena Baskar 56 VP 9848022333 Hyderabad
8 9 Gayathri Ragu 36 Engineer 9848022333 Chennai
9 10 Kavitha Manoharan 49 AVP 9848022336 Noida
0 11 Mahesh Muthu 38 SrManager 9853526340 Chennai
1 12 Elango Raman 25 Assistant 9865637872 Mumbai
2 13 Kadiresan kesavan 41 VP 9746325437 Delhi
3 14 Sundar Paul 48 AVP 9947362222 Thane
4 15 Kumar Ramasamy 30 AVP 9346212333 Noida
print (df.append(df2))
id fname lname age desig no place
0 1 Nithya Duraisamy 31 Manager 9587412536 Hyderabad
1 2 Nandhini Babu 28 AstManager 9848022338 Delhi
2 3 Madhuri Nathan 51 VP 9848022339 Delhi
3 4 Kavitha Manoharan 45 AVP 9848022330 Hyderabad
4 5 Vijaya Kandasamy 40 AVP 9848022336 Noida
5 6 Aarthi Raj 22 AstManager 9848022335 Chennai
6 7 Lavanya Sankar 23 SrEngineer 9848022334 Chennai
7 8 Meena Baskar 56 VP 9848022333 Hyderabad
8 9 Gayathri Ragu 36 Engineer 9848022333 Chennai
9 10 Kavitha Manoharan 49 AVP 9848022336 Noida
0 11 Mahesh Muthu 38 SrManager 9853526340 Chennai
1 12 Elango Raman 25 Assistant 9865637872 Mumbai
2 13 Kadiresan kesavan 41 VP 9746325437 Delhi
3 14 Sundar Paul 48 AVP 9947362222 Thane
4 15 Kumar Ramasamy 30 AVP 9346212333 Noida
Joins
இரண்டு டேட்டாஃப்பிரேமிலும், ஒரே நகரத்தின் பெயரைக் கொண்ட தகவல்களை மட்டும் இணைத்து வெளிப்படுத்த விரும்பினால், அதற்கான join பின்வருமாறு அமையும்.
print (pd.merge(df,df2,on=’place’))
id_x fname_x lname_x age_x … lname_y age_y desig_y no_y
0 2 Nandhini Babu 28 … kesavan 41 VP 9746325437
1 3 Madhuri Nathan 51 … kesavan 41 VP 9746325437
2 5 Vijaya Kandasamy 40 … Ramasamy 30 AVP 9346212333
3 10 Kavitha Manoharan 49 … Ramasamy 30 AVP 9346212333
4 6 Aarthi Raj 22 … Muthu 38 SrManager 9853526340
5 7 Lavanya Sankar 23 … Muthu 38 SrManager 9853526341
6 9 Gayathri Ragu 36 … Muthu 38 SrManager 9853526341
[7 rows x 13 columns]
அதே போல left, right,inner, outer எனப் பல்வேறு join முறைகளையும் இதில் உபயோகிக்கலாம்.
print (pd.merge(df,df2,on=’place’,how=’right’)) # left, outer, inner
id_x fname_x lname_x age_x… lname_y age_y desig_y no_y
0 2.0 Nandhini Babu 28.0 … kesavan 41 VP 9746325437
1 3.0 Madhuri Nathan 51.0 … kesavan 41 VP 9746325437
2 5.0 Vijaya Kandasamy 40.0 … Ramasamy 30 AVP 9346212333
3 10.0 Kavitha Mnoharan 49.0 … Ramasamy 30 AVP 9346212333
4 6.0 Aarthi Raj 22.0 … Muthu 38 SrManager 9853526340
5 7.0 Lavanya Sankar 23.0 … Muthu 38 SrManager 9853526341
6 9.0 Gayathri Ragu 36.0 … Muthu 38 SrManager 9853526341
7 NaN NaN NaN NaN … Raman 25 Assistant 9865637872
8 NaN NaN NaN NaN … Paul 48 AVP 9947362222
[9 rows x 13 columns]
Sorting
தரவுகளை வரிசைப்படுத்துதல் என்பது இரண்டு விதங்களில் அமையும். Index- ஐ வைத்து வரிசைப்படுத்தலாம் அல்லது
ஏதேனும் எண் மதிப்பினைக் கொண்ட column-ன் அடிப்படையில் வரிசைப்படுத்தலாம்.
இங்கு sort_index() மூலம் தரவுகள் இறங்கு வரிசையில் வரிசைப்படுத்திக் காட்டப்பட்டுள்ளது.
அடுத்து sort_values() மூலம் age column-ல் உள்ள மதிப்பினைப் பொறுத்து வரிசைப்படுத்திக் காட்டப்பட்டுள்ளது.
print (df2.sort_index(ascending=False))
id fname lname age desig no place
4 15 Kumar Ramasamy 30 AVP 9346212333 Noida
3 14 Sundar Paul 48 AVP 9947362222 Thane
2 13 Kadiresan kesavan 41 VP 9746325437 Delhi
1 12 Elango Raman 25 Assistant 9865637872 Mumbai
0 11 Mahesh Muthu 38 Sr Manager 9853526340 Chennai
print (df2.sort_values(by=’age’))
id fname lname age desig no place
1 12 Elango Raman 25 Assistant 9865637872 Mumbai
4 15 Kumar Ramasamy 30 AVP 9346212333 Noida
0 11 Mahesh Muthu 38 SrManager 9853526340 Chennai
2 13 Kadiresan kesavan 41 VP 9746325437 Delhi
3 14 Sundar Paul 48 AVP 9947362222 Thane