Aus dict den key mit der längsten series finden und alle items mit dieser Länge filtern
Verfasst: Dienstag 2. Juli 2019, 08:23
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,)
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,)