Pandas Append - добавление новой строки без номера индекса. - PullRequest
0 голосов
/ 06 апреля 2020

Это то, что я пытаюсь выполнить sh с помощью своего кода: у меня есть текущий CSV-файл с именами теннисистов, и я хочу добавить в него новых игроков, как только они появятся в рейтинге. Мой скрипт проходит ранжирование и создает массив, а затем импортирует имена из файла CSV. Предполагается, чтобы увидеть, какие имена не в последнем, а затем извлечь онлайн-данные для этих имен. Затем я просто хочу, чтобы новые строки добавлялись в конец этого старого CSV-файла. Моя проблема в том, что новая строка индексируется с именем игрока, а не после индекса старого файла. Есть идеи, почему это происходит? Кроме того, почему добавляется безымянный столбец?


def get_all_players():

    # imports names of players currently in the atp rankings
    current_atp_ranking = check_atp_rankings()
    current_player_list = current_atp_ranking['Player']

    # clean up names in case of white spaces
    for i in range(0, len(current_player_list)):
        current_player_list[i] = current_player_list[i].strip()

    # reads the main file and makes a dataframe out of it
    current_file = 'ATP_stats_new.csv'
    df = pd.read_csv(current_file)

    # gets all the names within the main file to see which current ones aren't there
    names_on_file = list(df['Player'])
    # cleans up in case of any white spaces
    for i in range(0, len(names_on_file)):
        names_on_file[i] = names_on_file[i].strip()

    # Removing Nadal for testing purposes
    names_on_file.remove("Rafael Nadal")

    # creating a list of players in current_players_list but not in names_on_file
    new_player_list = [x for x in current_player_list if x not in names_on_file]

    # loop through new_player_list
    for player in new_player_list:

        # delay to avoid stopping
        time.sleep(2)

        # finding the player's atp link for profile based on their name
        atp_link = current_atp_ranking.loc[current_atp_ranking['Player'] == player, 'ATP_Link']
        atp_link = atp_link.iloc[0]

        # make a basic dictionary with just the player's name and link
        player_dict = [{'Name': player, 'ATP_Link': atp_link}]

        # enter the new dictionary into the existing main file
        df.append(player_dict, ignore_index=True)

    # print dataframe to see how it looks before exporting
    print(df)

    # export dataframe into current file
    df.to_csv(current_file)

Сначала файл выглядит так:

      Unnamed: 0            Player  ...                         Coach Turned_Pro
0              0    Novak Djokovic  ...                           NaN        NaN
1              1      Rafael Nadal  ...   Carlos Moya, Francisco Roig     2001.0
2              2     Roger Federer  ...  Ivan Ljubicic, Severin Luthi     1998.0
3              3   Daniil Medvedev  ...                           NaN        NaN
4              4     Dominic Thiem  ...                           NaN        NaN
...          ...               ...  ...                           ...        ...
1976        1976      Brian Bencic  ...                           NaN        NaN
1977        1977  Boruch Skierkier  ...                           NaN        NaN
1978        1978      Majed Kilani  ...                           NaN        NaN
1979        1979   Quentin Gueydan  ...                           NaN        NaN
1980        1980     Preston Brown  ...                           NaN        NaN

И вот как выглядит новая строка:

1977              1977.0  ...        NaN
1978              1978.0  ...        NaN
1979              1979.0  ...        NaN
1980              1980.0  ...        NaN
Rafael Nadal         NaN  ...       2001

1 Ответ

0 голосов
/ 06 апреля 2020

В вашем коде отсутствуют важные части, которые необходимы для точного ответа на вопрос. Две мысли, основанные на том, что вы опубликовали:

Импорт вашего CSV-файла

Ваш предыдущий CSV-файл, вероятно, был сохранен с индексом. Убедитесь, что содержимое файла CSV не имеет индекса dataframe, когда вы последний раз использовали его в первом столбце CSV. При сохранении сделайте следующее:

file.to_csv('file.csv', index=False)

При загрузке файла следующим образом:

pandas.read_csv('file.csv')

ему будет автоматически присвоен индексный номер, и в нем не будет повторяющегося столбца.

Неправильный порядок столбцов

Не уверен, какая информация в каком порядке atp_link вводит. Из того, что вы предоставили, похоже, что он возвращает два столбца: «Тренер» "и" Turning Pro ".

Я бы порекомендовал создать список (не диктат) для каждого нового игрока, которого вы хотите добавить после извлечения информации из atp_link. Поэтому, если вы добавляете Надаль, вы создаете информационный список из информации для каждого нового игрока . Информационный список Надаля будет выглядеть следующим образом:

info_list = ['Rafael Nadal', '','2001']

Затем вы добавляете список к фрейму данных следующим образом:

df.loc[len(df),:] = info_list

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...