csv Daten mit plotly dartsellen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
peitenbreiten
User
Beiträge: 4
Registriert: Montag 24. Juni 2019, 13:15

Halllo zusammen,

Ich würde gern den Inhalt einer csv in einer html Datei plotten.


# Abgewandelter Code bringt Fehler (siehe unten)
import pandas as pd
import plotly.graph_objects as go

my_file = open('/home/user/bin/python3/test/test.csv', 'r')
graph = go.Figure(data=go.Bar(
x=[pd.read_csv(my_file,
sep=";",
usecols=[0])],
y=[pd.read_csv(my_file,
sep=";",
usecols=[1])]
))
graph.write_html('first_plot.html', auto_open=True)
my_file.close()

wollte ich nach diesem Vorbild umsetzen:

#Originalcode (funktioniert)
import plotly.graph_objects as go

graph = go.Figure(data=go.Bar(
x=[4, 2, 7, 4, 2, 7],
y=[41, 1337, 80, 41, 1337, 80]
))
graph.write_html('first_plot.html', auto_open=True)

Ich bekomme aber diese Fehlermeldung:
Das untersuchte Programm erzeugte die Ausnahme unhandled pandas.errors.EmptyDataError
„No columns to parse from file“
Datei: /usr/lib64/python3.10/site-packages/pandas/_libs/parsers.cpython-310-x86_64-linux-gnu.so, Zeile: 554

Mit diesem Code wird der Inhalt sauber angezeigt, allerdings nicht als html in einem Browserfenster...

df = pd.read_csv("/home/user/bin/python3/test/test.csv")
print (df)

Ebenso mit:

my_file = open('/home/user/bin/python3/test/test.csv', 'r')
df = pd.read_csv(my_file)
print (df)

Wer kann mir da helfen?
Viele Grüße
peitenbreiten
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@peitenbreiten: Du versuchst aus einer Datei aus der bereits einmal alles ausgelesen wurde und wo der Dateizeiger deshalb am Ende der Datei steht, noch mal alles auszulesen. Lies die Daten einfach mit *einem* Aufruf ein, in einen DataFrame mit beiden Spalten.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
peitenbreiten
User
Beiträge: 4
Registriert: Montag 24. Juni 2019, 13:15

Hallo blackjack,
das war mir nicht klar, dass der Dateizeiger nach dem Öffnen bereits am Ende der Datei steht.
Im Originalcode sind Daten für die X- und Daten für die Y-Achse angegeben. Diese wollte ich aus der csv-Datei übergeben.
Ich lese aus Deiner Antwort:
my_file = open('/home/user/bin/python3/test/test.csv', 'r') --> nicht mehr nutzen

graph = go.Figure(data=go.Bar[pd.read_csv("/home/user/bin/python3/test/test.csv",
sep=";",
usecols=[0,1]
)
]
)
graph.write_html('first_plot.html', auto_open=True)

Das gibt einen Fehler:
user@ws:/home/user/bin/python3/test>python3.10 -i a_print.py
Traceback (most recent call last):
File "/home/user/bin/python3/test/erster_versuch.py", line 7, in <module>
graph = go.Figure(data=go.Bar[pd.read_csv("/home/user/bin/python3/test/test.csv",
TypeError: 'type' object is not subscriptable

Hatte ich mir schon gedacht...

Wie wird denn der graph gefüllt?
Benutzeravatar
grubenfox
User
Beiträge: 412
Registriert: Freitag 2. Dezember 2022, 15:49

nach dem 'open' nicht, aber nach dem (ersten) 'read_csv' steht der Zeiger am Ende

aus dem ersten Posting, leicht umformatiert:

Code: Alles auswählen

graph = go.Figure(data=go.Bar(
x=[pd.read_csv(my_file, sep=";", usecols=[0])], 
y=[pd.read_csv(my_file, sep=";", usecols=[1])]
))
peitenbreiten
User
Beiträge: 4
Registriert: Montag 24. Juni 2019, 13:15

Und wie umgehe ich das? Ich brauche für das Koordinatensystem ja mind. zwei Zuordnungen.
X und Y. X wird eingelesen, Y aber nicht mehr, weil der Zeiger am Ende der Datei steht? Wie kann ich die Datei denn neu einlesen?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Warum denn neu einlesen? Du iannst doch alle Daten schon beim ersten Mal einlesen. Benutz sie doch einfach.
peitenbreiten
User
Beiträge: 4
Registriert: Montag 24. Juni 2019, 13:15

Ah, beim Einlesen ist das Objekt (Datei) also schon komplett eingelesen.
Sollte das nicht vor graph = passieren?
Und:
Wie spreche ich denn die 1. Spalte (ohne 1. Zeile) in diesem Objekt an?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Indem du das pandas Tutorial liest, in dem steht, wie einzelne Spalten eines Frames angesprochen werden. Das usecols Argument beim einlesen muss dann natürlich wegbleiben, man will ja alle beiden Spalten.
Antworten