ট্র্যাজিং সিএপিএসকে আলাদা কলামে সরানোর জন্য আমি কীভাবে রেজেেক্স দিয়ে কলামগুলি বিভক্ত করতে পারি?


11

আমি রেজেক্স ব্যবহার করে একটি কলাম বিভক্ত করার চেষ্টা করছি, তবে স্প্লিটটি সঠিকভাবে পাওয়া যাবে বলে মনে হচ্ছে না। আমি সমস্ত চলমান সিএপিএস নেওয়ার চেষ্টা করছি এবং এগুলি একটি পৃথক কলামে স্থানান্তরিত করব। সুতরাং আমি সমস্ত ক্যাপগুলি পাচ্ছি যা হয় পরপর 2-4 সিএপিএস হয়। তবে কলামটি ফাঁকা 'Name'থাকাকালীন এটি কেবল কলামটি ছাড়ছে leaving'Team'

আমার কোডটি এখানে:

import pandas as pd

url = "https://www.espn.com/nba/stats/player/_/table/offensive/sort/avgAssists/dir/desc"

df = pd.read_html(url)[0].join(pd.read_html(url)[1])
df[['Name','Team']] = df['Name'].str.split('[A-Z]{2,4}', expand=True)  

আমি এটা চাই:

print(df.head(5).to_string())
   RK             Name POS  GP   MIN   PTS  FGM   FGA   FG%  3PM  3PA   3P%  FTM  FTA   FT%  REB   AST  STL  BLK   TO  DD2  TD3    PER
0   1  LeBron JamesLA  SF  35  35.1  24.9  9.6  19.7  48.6  2.0  6.0  33.8  3.7  5.5  67.7  7.9  11.0  1.3  0.5  3.7   28    9  26.10
1   2   Ricky RubioPHX  PG  30  32.0  13.6  4.9  11.9  41.3  1.2  3.7  31.8  2.6  3.1  83.7  4.6   9.3  1.3  0.2  2.5   12    1  16.40
2   3   Luka DoncicDAL  SF  32  32.8  29.7  9.6  20.2  47.5  3.1  9.4  33.1  7.3  9.1  80.5  9.7   8.9  1.2  0.2  4.2   22   11  31.74
3   4   Ben SimmonsPHIL  PG  36  35.4  14.9  6.1  10.8  56.3  0.1  0.1  40.0  2.7  4.6  59.0  7.5   8.6  2.2  0.7  3.6   19    3  19.49
4   5    Trae YoungATL  PG  34  35.1  28.9  9.3  20.8  44.8  3.5  9.4  37.5  6.7  7.9  85.0  4.3   8.4  1.2  0.1  4.8   11    1  23.47

এটি হয়ে:

print(df.head(5).to_string())
   RK             Name    Team    POS  GP   MIN   PTS  FGM   FGA   FG%  3PM  3PA   3P%  FTM  FTA   FT%  REB   AST  STL  BLK   TO  DD2  TD3    PER
0   1  LeBron James        LA    SF  35  35.1  24.9  9.6  19.7  48.6  2.0  6.0  33.8  3.7  5.5  67.7  7.9  11.0  1.3  0.5  3.7   28    9  26.10
1   2   Ricky Rubio        PHX    PG  30  32.0  13.6  4.9  11.9  41.3  1.2  3.7  31.8  2.6  3.1  83.7  4.6   9.3  1.3  0.2  2.5   12    1  16.40
2   3   Luka Doncic        DAL    SF  32  32.8  29.7  9.6  20.2  47.5  3.1  9.4  33.1  7.3  9.1  80.5  9.7   8.9  1.2  0.2  4.2   22   11  31.74
3   4   Ben Simmons        PHIL    PG  36  35.4  14.9  6.1  10.8  56.3  0.1  0.1  40.0  2.7  4.6  59.0  7.5   8.6  2.2  0.7  3.6   19    3  19.49
4   5    Trae Young        ATL    PG  34  35.1  28.9  9.3  20.8  44.8  3.5  9.4  37.5  6.7  7.9  85.0  4.3   8.4  1.2  0.1  4.8   11    1  23.47

উত্তর:


9

আপনি দুটি কলামে ডেটা এক্সট্র্যাক্ট করতে পারেন যেমন একটি রেজিেক্স ^(.*?)([A-Z]+)$বা ব্যবহার করে ^(.*[^A-Z])([A-Z]+)$:

df[['Name','Team']] = df['Name'].str.extract('^(.*?)([A-Z]+)$', expand=True)

এটি সবশেষে শেষ চরকে রাখবে যা গ্রুপ "নাম" এর বড় হাতের অক্ষর নয় এবং গ্রুপ "টিম" এর শেষ বড় অক্ষর নয়।

দেখুন Regex ডেমো # 1 এবং Regex ডেমো # 2

বিস্তারিত

  • ^ - একটি স্ট্রিং শুরু
  • (.*?)- গ্রুপ 1 ক্যাপচারিং: লাইন ব্রেক ব্রেক ব্যতীত অন্য কোনও শূন্য বা আরও বেশি, যত কম সম্ভব
    বা
  • (.*[^A-Z]) - লাইন ব্রেক ব্রেক ব্যতীত শূন্য বা তার চেয়ে বেশি অক্ষর, যতটা সম্ভব শেষের অক্ষর পর্যন্ত, যেটি ASCII বড় হাতের অক্ষর নয় (পরবর্তী প্যাটার্নগুলির সাথে ম্যাচটি মঞ্জুর করে) নোট করুন (এই প্যাটার্নটি ইঙ্গিত দেয় যে এখানে কমপক্ষে 1 টি অক্ষর রয়েছে শেষ বড় অক্ষর)
  • ([A-Z]+) - গ্রুপ 2 ক্যাপচার করছে: এক বা একাধিক ASCII বড় হাতের অক্ষর
  • $ - স্ট্রিং এর শেষ।

1

আমি ফাংশনগুলিতে কয়েকটি পরিবর্তন করেছি, আপনার পুনরায় প্যাকেজ যুক্ত করতে হতে পারে।

এটি একটি সামান্য ম্যানুয়াল, তবে আমি আশা করি এটি যথেষ্ট হবে। দিন শুভ হোক!

df_obj_skel = dict()
df_obj_skel['Name'] = list()
df_obj_skel['Team'] = list()
for index,row in df.iterrows():
    Name = row['Name']
    Findings = re.search('[A-Z]{2,4}$', Name)
    Refined_Team = Findings[0]
    Refined_Name = re.sub(Refined_Team + "$", "", Name)
    df_obj_skel['Team'].append(Refined_Team)
    df_obj_skel['Name'].append(Refined_Name)
df_final = pd.DataFrame(df_obj_skel)
print(df_final)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.