Записать значение из csv в файл xlsx на основе совпадающего имени с использованием python - PullRequest
1 голос
/ 14 июля 2020

У меня есть два файла: один файл xlsx, а другой файл csv. Мне нужно взять очки Fantasy из файла csv и записать их в файл xlxs, ЕСЛИ два имени совпадают с соотношением выше 50%.

import pandas as pd
from fuzzywuzzy import fuzz

df = pd.read_excel('/Users/aus10/Desktop/PGA/Tournament_Results/A_Military_Tribute_at_the_Greenbrier_2020.xlsx')
df_2 = pd.read_csv('/Users/aus10/Desktop/PGA/Fantasy_Tournament_Results/Greenbrier_2020.csv')

for name in df['Player_Name']:
    for second_name in df_2['Name']:
        Ratio = Ratio = fuzz.ratio(name.lower(),second_name.lower())
        if Ratio >= 50:
            df.at[-1, 'FPTS'] = df_2['FantasyPointsDraftKings']

Я не совсем уверен, как сказать ему написать в этот файл c, когда имена совпадают, но вот что у меня есть

Я хочу использовать имя из нижнего xlsx файла, и если оно соответствует имени из файла csv, тогда я хочу чтобы взять значение FantasyPointsDraftKings из этого имени и записать его в файл xlxs, сопоставив имена и добавив значение в столбец FPTS в файле xlsx.

enter image description here xlsx file

Google Sheets link

https://docs.google.com/spreadsheets/d/1jfr4Ma86dfLS5VnoCXTbNOJtDXxsG7HK5lt3meteEXI/edit?usp=sharing

1 Ответ

1 голос
/ 14 июля 2020
  1. Сначала вы должны прочитать 2 файла в pandas фрейм данных
  2. Возьмите подмножество соответствующих столбцов из 2 фреймов данных
  3. напишите функцию, которая принимает указанные выше столбцы ( пункт 2) и вычисляет сходство

Здесь я использовал расстояние Яро-Ринклера, чтобы найти сходство - https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance#: ~: text = In% 20computer% 20science% 20and% 20statistics, Jaro ).

Вы можете использовать другой алгоритм для сопоставления

    import pandas as pd
    import jellyfish
    
    csv = pd.read_csv("data.csv")
    excel = pd.read_excel("data.xlsx")
    
    def process(row):
        match = jellyfish.jaro_distance(row["Name"], row["Player_Name"])
        if match > 0.5: return row["FantasyPoints"]
        return None
    
    excel["FantasyPoints"] = pd.concat([csv["Name"],csv["FantasyPoints"],excel["Player_Name"]],axis=1).apply(process, axis=1)
    
    excel.to_excel("data.xlsx")

Вывод:

       Player_Name  Scrambling  Average_Driving_Distance  Fairways_Hit    GIR  Sand_Saves  Average_Putts_GIR  Total_Putts_GIR  Putts_Per_Round  SG_Putting  SG_Around_the_Green  SG_Approach_the_Green  SG_Off_the_Tee   FPTS  FantasyPoints
0  Joaquin Niemann       78.57                     313.0         64.29  80.56       83.33              1.603               93            27.50        2.20                 0.56                   1.13            0.51  142.5          142.5
1         Tom Hoge       78.57                     315.1         67.86  61.11       71.43              1.591               70            25.25        0.69                 0.74                   0.89            0.57  113.0          113.0
2     Brian Harman       83.33                     303.1         64.29  66.67       40.00              1.646               79            26.00        1.27                 0.10                   0.72            0.56  107.5          107.5
...