Comme le titre l'explique, j'essaie de lire dans un fichier CSV et de le tracer, le fichier est au format suivant:

Dishwasher,60,1,1,1,0,0,1

Washing Machine,200,0,0,0,0,1,1

Où je veux juste tracer les 6 chiffres à la fin.

Voici mon code jusqu'à présent:

import matplotlib.pyplot as plt
import numpy as np
import csv
y1=[]
y2=[]

x = np.array([1,2,3,4,5,6])
with open('File.csv', 'r') as csvfile:
    plots = csv.reader(csvfile, delimiter=',')
    rows = [row for row in plots]
y1=int((rows[0])-2)
y2=int((rows[1])-2)

plt.plot(x,y1, label='Washing Machine')
plt.plot(x,y2, label='Dishwasher')
plt.show()

J'essaie de résoudre le problème depuis des heures maintenant, mais tout ce que je fais entraîne une nouvelle erreur.

Dans ce code, l'erreur est:

TypeError: type (s) d'opérande non pris en charge pour -: 'list' et 'int'

Ce qui, d'après ma compréhension, signifie qu'il essaie de convertir une liste en un entier, ce qui n'est pas possible? Merci pour toute aide

2
Bethany Jade 1 juin 2020 à 10:10

3 réponses

Meilleure réponse

Dans ces 2 lignes:

y1=int((rows[0])-2)
y2=int((rows[1])-2)

Vous prenez les premier et deuxième éléments de la liste en soustrayant 2 et en transformant sur un int en l'assignant aux variables y1 et y2 cela signifie que vous ne pouvez pas soustraire un entier d'une liste

Je vous recommande d'inspecter vos valeurs avant de les tracer, vous pouvez utiliser le débogueur ou simplement imprimer rows, y1 et y2 et vous aurez plus d'informations sur ce qui se passe

L'erreur vous indique exactement ce qui se passe:

TypeError: unsupported operand type(s) for -: 'list' and 'int'  

Obs essayez ceci:

y1=rows[0][2:]
y2=rows[1][2:]
4
willian ver valem 1 juin 2020 à 07:28

Tout d'abord, vos lignes sont une liste contenant des tuples, donc avec les lignes [0] vous faites référence au premier tuple et non à l'entier à l'intérieur. Vous devez aller plus loin pour le choisir.

Ensuite, vous soustrayez une chaîne avec un entier avec cette expression: int((rows[0])-2) (car vous convertissez après la soustraction et pas avant)

Troisièmement, vous devez passer un itérable à la fonction de tracé qui est de longueur x

Donc je vois juste que vous fournissez le csv, le script fonctionne avec mon fichier de reconstruction csv

import matplotlib.pyplot as plt
import numpy as np
import csv
y1=[]
y2=[]

x = np.array([1,2,3,4,5,6])
with open('File.csv', 'r') as csvfile:
    plots = csv.reader(csvfile, delimiter=';')
    rows = [row for row in plots]

y1=[int(row[0])-2 for row in rows]
y2=[int(row[1])-2 for row in rows]

plt.plot(x,y1, label='Washing Machine')
plt.plot(x,y2, label='Dishwasher')
plt.show()
1
Laurent B. 1 juin 2020 à 07:51

On dirait que les lignes sont un tableau de tableaux. Les lignes [0] sont un tableau et vous essayez de faire les lignes [0] - 2

0
nowakasd 1 juin 2020 à 07:17