Hacer Matplotlib Ignorar los encabezados
Mi amigo está tratando de hacer un gráfico usando el python importación matplotlib y un archivo CSV que le he dado. Sin embargo, el CSV que le he dado incluye partidas (COUNTRY, COST) por lo que el programa de py no puede funcionar correctamente. El error dice "no podría convertir la cadena a flotar". Aquí está su código un ejemplo de mi archivo. ¿Cómo puede hacer que el gráfico de barras ignore la primera fila del archivo CSV para que el código pueda ejecutar
import matplotlib.pyplot as plt
import csv
price = []
countries = []
with open ("CpremiumusersEurope.csv","r") as csvfile:
plot = csv.reader(csvfile)
for row in plot:
price.append(float(row[1]))
countries.append(str(row[0]))
plt.style.use('grayscale')
plt.bar( countries, price, label='Europe', color='red')
plt.ylabel('Price in Europe ($)')
plt.title('Cost of spotify premium per country')
plt.xticks(rotation=90)
plt.legend(loc='best')
plt.show()
Pregunta hecha hace 3 años, 4 meses, 27 días - Por debugdragon
4 Respuestas:
-
Puede saltarse la primera fila así:
for idx, row in enumerate(plot): if idx == 0: continue price.append(float(row[1])) countries.append(str(row[0]))
También podrías saltarlo de esta manera, que me gusta menos como es menos flexible.
for row in plot: if row[1] == 'COST': continue price.append(float(row[1])) countries.append(str(row[0]))
Respondida el Dec 18, 2020 a las 13:32 - por binarybard
Votos positivos: 0 | Votos negativos: 0 -
csv.reader
devuelve un iteratorAsí puedes llamar siguiente onplot
para avanzar a la siguiente fila:with open ("CpremiumusersEurope.csv","r") as csvfile: plot = csv.reader(csvfile) # Consume the first row from plot next(plot) # Now loop over the rest of the rows. for row in plot: price.append(float(row[1])) countries.append(str(row[0]))
Respondida el Dec 18, 2020 a las 13:40 - por codeartisan
Votos positivos: 0 | Votos negativos: 0 -
El problema que estás experimentando se debe a que estás intentando convertir la cadena de las cabeceras del archivo CSV a un número flotante, lo cual causa el error "no podría convertir la cadena a flotar". Para evitar este problema, puedes simplemente omitir la primera fila del archivo CSV que contiene las cabeceras.
Para lograr esto, puedes modificar tu código de la siguiente manera:
python import matplotlib.pyplot as plt import csv price = [] countries = [] with open("CpremiumusersEurope.csv", "r") as csvfile: plot = csv.reader(csvfile) next(plot)
Ignorar la primera fila que contiene las cabeceras
for row in plot: price.append(float(row[1])) countries.append(str(row[0])) plt.style.use('grayscale') plt.bar(countries, price, label='Europe', color='red') plt.ylabel('Price in Europe ($)') plt.title('Cost of Spotify Premium per country') plt.xticks(rotation=90) plt.legend(loc='best') plt.show()Al agregar la línea
next(plot)
después de abrir el archivo CSV, el programa ignora la primera fila (que contiene los encabezados) y continúa leyendo los datos de la segunda fila en adelante. Esto debería solucionar tu problema y permitir que el código funcione correctamente.Respondida el Dec 19, 2020 a las 13:31 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para hacer que Matplotlib ignore la primera fila del archivo CSV, puedes usar el argumento
skiprows
en la funcióncsv.reader()
. Este argumento especifica el número de filas que se saltarán al leer el archivo.Aquí tienes el código modificado:
python import matplotlib.pyplot as plt import csv price = [] countries = [] with open ("CpremiumusersEurope.csv","r") as csvfile: plot = csv.reader(csvfile, skiprows=1) for row in plot: price.append(float(row[1])) countries.append(str(row[0])) plt.style.use('grayscale') plt.bar( countries, price, label='Europe', color='red') plt.ylabel('Price in Europe ($)') plt.title('Cost of spotify premium per country') plt.xticks(rotation=90) plt.legend(loc='best') plt.show()
El argumento
skiprows=1
le indica acsv.reader()
que salte la primera fila del archivo CSV. Esto permitirá que tu código se ejecute correctamente y genere el gráfico de barras sin incluir los encabezados.Respondida el Dec 19, 2020 a las 13:45 - por Gemini
Votos positivos: 0 | Votos negativos: 0