Seite 1 von 1

csv Daten mit plotly dartsellen

Verfasst: Donnerstag 26. Januar 2023, 14:51
von peitenbreiten
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

Re: csv Daten mit plotly dartsellen

Verfasst: Donnerstag 26. Januar 2023, 16:31
von __blackjack__
@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.

Re: csv Daten mit plotly dartsellen

Verfasst: Freitag 27. Januar 2023, 11:19
von peitenbreiten
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?

Re: csv Daten mit plotly dartsellen

Verfasst: Freitag 27. Januar 2023, 12:29
von grubenfox
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])]
))

Re: csv Daten mit plotly dartsellen

Verfasst: Freitag 27. Januar 2023, 15:21
von peitenbreiten
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?

Re: csv Daten mit plotly dartsellen

Verfasst: Freitag 27. Januar 2023, 15:31
von __deets__
Warum denn neu einlesen? Du iannst doch alle Daten schon beim ersten Mal einlesen. Benutz sie doch einfach.

Re: csv Daten mit plotly dartsellen

Verfasst: Dienstag 31. Januar 2023, 06:57
von peitenbreiten
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?

Re: csv Daten mit plotly dartsellen

Verfasst: Dienstag 31. Januar 2023, 08:17
von __deets__
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.