Hallo ich bin Python Anfänger und würde mich über Hilfe freuen!
Es geht um folgendes: Ich möchte aus einer Anzahl von keys aus dict, den key finden, mit der längsten series mit den meisten items. Danach möchte ich genau diese items filtern und in eine neue Excel Datei einfügen. Leider komme ich seit einigen Tagen einfach nicht weiter.. Vielen Dank schonmal im Voraus für jede Hilfe!
import glob
from os.path import basename
import operator
import numpy as np
import pandas as pd
files = glob.glob('Temperatur/*.dat')
writer = pd.ExcelWriter(Temperatur.xlsx', engine='xlsxwriter')
for file in files:
sheet_name = basename(file)
sheet_name = str(sheet_name.split('_', 1)[0][1:])
with open(file, 'r') as f:
l = f.readlines()
bin_files = []
for line in l:
row = line.strip().split(',')
num = row[0]
if num == '211':
# print(row[1])
bin_files.append(row[1])
vars = {}
for name in bin_files:
stem, ext = name.rsplit('.', 1)
assert ext in ['R32', 'R64'], 'Unknown data format'
if ext == 'R32':
values = np.fromfile('temperatur' + '/' + name, dtype=np.float32)
else:
values = np.fromfile('temperatur + '/' + name, dtype=np.float64)
var_name = stem.split('_', 10)[-1]
vars[var_name] = values
# filter keys with longest series
# 1) find longest series with x items
max(vars.items(), key=operator.itemgetter(1))[0]
# 2) filter all items with series length x
def by_size(vars, max):
result = []
for values in vars:
if len(values) == max:
result.append(values)
return result
df = pd.DataFrame.from_dict(values)
df.to_excel(writer, sheet_name=sheet_name, index=False, header=None)
writer.save()
writer.close()
Beim Compilieren bekomme ich folgende Fehlermeldung:
ValueError: operands could not be broadcast together with shapes (12,) (13,)
Aus dict den key mit der längsten series finden und alle items mit dieser Länge filtern
Das was Du da unter dem Kommentaren filter beschreibst, ist quatsch. `max` ist eine Funktion, mit dem Rückgabewert machst Du aber nichts. `by_size` ist auch eine Funktion, die aber nie aufgerufen wird.
Ins Excel werden die Values der letzten Datei geschrieben.
Wenn Du Fehler bekommst, bitte den kompletten Traceback posten, sonst muß man Raten, wo der Fehler auftritt.
Dinge aus os.path importiert man normalerweise nicht direkt. str.split liefert schon eine Liste mit Strings, daraus ein Element nochmal in einen String umzuwandeln ist unnötig. Du benutzt relative Verzeichnisse und zwar einmal Temperatur und einmal temperatur, solche expliziten Strings sollte man als Konstanten am Anfang definieren. Pfade setzt man nicht mit + zusammen, dafür gibt es os.path.join.
Das Lesen der Values unterscheidet sich nur im dtype. Den solltest Du als Variable definieren, dass es nur einmal fromfile im Code gibt. Am einfachsten über ein Wörterbuch, dann hast Du die Prüfung auf die Extension gleich integriert.
Ins Excel werden die Values der letzten Datei geschrieben.
Wenn Du Fehler bekommst, bitte den kompletten Traceback posten, sonst muß man Raten, wo der Fehler auftritt.
Dinge aus os.path importiert man normalerweise nicht direkt. str.split liefert schon eine Liste mit Strings, daraus ein Element nochmal in einen String umzuwandeln ist unnötig. Du benutzt relative Verzeichnisse und zwar einmal Temperatur und einmal temperatur, solche expliziten Strings sollte man als Konstanten am Anfang definieren. Pfade setzt man nicht mit + zusammen, dafür gibt es os.path.join.
Das Lesen der Values unterscheidet sich nur im dtype. Den solltest Du als Variable definieren, dass es nur einmal fromfile im Code gibt. Am einfachsten über ein Wörterbuch, dann hast Du die Prüfung auf die Extension gleich integriert.
- __blackjack__
- User
- Beiträge: 14044
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Der Code kommt so bekannt vor. Ich habe hier doch schon mal einiges dazu geschrieben: viewtopic.php?f=1&t=45819
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.