எளிய தமிழில் Pandas-7

SQL Operations

SQL- ல் உள்ள limit, group by, order by, joins, where condition போன்ற பல்வேறு கட்டளைகளுக்கு இணையான கட்டளைகள் pandas-லும் உள்ளன. இவற்றைப் பற்றியெல்லாம் இப்பகுதியில் காண்போம்.


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

%d bloggers like this: