Как очистить определенные c данные из файла CSV в Python? - PullRequest
0 голосов
/ 16 июня 2020

За последние несколько дней я взял на себя все самое лучшее. Я знаю основы этого, но понятия не имею, как правильно очищать данные. Вот в чем проблема: я должен использовать ссылку csv (указанную в приведенном ниже коде), чтобы узнать, какая из скандинавских стран (Дания, Швеция и Норвегия) выиграла больше всего золотых медалей в керлинге, фигурном катании, лыжах и хоккее. все, начиная с 2001 года. Я сделал очень простой код, как показано ниже (правда, только для керлинга, другие виды спорта я добавлю позже), но он ничего не возвращает. Я понятия не имею, что мне не хватает, поэтому был бы очень признателен за любой вклад по этому поводу.

import requests
from bs4 import BeautifulSoup as bs
import operator
from collections import Counter
import re

url = "https://sites.google.com/site/dr2fundamentospython/arquivos/Winter_Olympics_Medals.csv"

csv = requests.get(url).text

lines = csv.splitlines()

for l in range(1, len(lines)):
  columns = lines[l].split(',')
  #print(columns)
  medalsSweden = 0
  medalsNorway = 0
  medalsDenmark = 0
  if columns[0] > '2001' and columns[4] == 'Curling' and columns[5] == 'NOR' and columns[7] == 'Gold':
    medalsNorway += medalsNorway + 1
    print(medalsNorway)
  else:
    if columns[0] > '2001' and columns[4] == 'Curling' and columns[5] == 'SWE' and columns[7] == 'Gold':
      medalsSweden += medalsSweden + 1
      print(medalsSweden)
    else:
      if columns[0] > '2001' and columns[4] == 'Curling' and columns[5] == 'DEN' and columns[7] == 'Gold':
        medalsDenmark += medalsDenmark + 1
        print(medalsDenmark)

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Проверяемые столбцы не совпадают. Глядя на столбцы в lines:

>>> lines[0]
'Year,City,Sport,Discipline,NOC,Event,Event gender,Medal'

«Спорт» - columns[2], а страна - columns[4]. (Вместо этого вы проверяете 4 и 5.) Кроме того, вы проверяли "дисциплину", которая является c в данном виде спорта. Например, «лыжный спорт» - это спорт, а «горные лыжи» - это дисциплина внутри него. Поэтому каждый оператор if должен быть изменен на:

... and columns[2] == 'Curling' and columns[4] == 'NOR' ...

Другие улучшения:

  1. при работе с числами, такими как «Год», преобразовать их в int s вместо сравнения строк:

    if int(columns[0]) > 2001 and ...
    

    В этом случае у вас не будет проблем с этим, поскольку они 4-di git лет, и вы сравниваете с '2001', строка 4-di git, поэтому сравнение строк работает.

  2. Используйте модуль CSV для анализа файлов CSV

  3. Измените структуру if утверждений, чтобы они не повторялись. Поскольку вас интересуют только медали 2001 и далее Gold, это должен быть топ-уровень if. Остальные проверки, если таковые имеются, должны быть вложены под него.

0 голосов
/ 16 июня 2020

Вы можете легко справиться с этим в функции pandas.read_csv():

import pandas as pd


df = pd.read_csv(
    "https://sites.google.com/site/dr2fundamentospython/arquivos/Winter_Olympics_Medals.csv")

filt = (df['Year'] > 2001) & (df['Discipline'] == 'Curling') & (
    df['NOC'] == 'NOR') & (df['Medal'] == 'Gold')

print(df[filt])
      Year            City    Sport  ...    Event Event gender Medal
1972  2002  Salt Lake City  Curling  ...  curling            M  Gold        

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