
RE: Open Source Tools und Daten
| 05.01.2023, 19:02 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2023, 19:56 von Lancelot.)(05.01.2023, 18:03)lomo schrieb: Welche Python-Module brauche ich für so was hier:
Ich habe je 1000 Datensätze in je 100 CSV-Dateien.
Ich möchte für jeden Datensatz in der neuesten Datei recursiv nach den zum Teil übereinstimmenden Einträgen in den übrigen 99 Dateien suchen und daraus ggf. für jeden der 1000 Datensätze einen 2 dimensionales Array bzw. Tabelle erstellen, um diese dann auszuwerten.
Pandas? Pytables? Am besten beides? Was anderes?
was heißt "zum Teil übereinstimmend" heißt du hast einen fachlichen Schlüssel? Also du hast Einträge zu MSFT in deiner neusten csv und suchst alle Einträge zu MSFT in den alten Dateien?
Für sowas ist ne Datenbank schon nett. Bei so kleinen Datenmengen geht das auch mit brute force machen. Dauert völlig bescheuert programmiert unter 3 Sekunden.
Der Großteil des codes ist da um Testdaten zu erzeugen.
Code:
import pandas as pd
import numpy as np
import glob
import os
import time
start_time = time.time()
# hier einen pfad für die erstellten Testdaten eintragen
my_path = "C:/Data/test/"
# test daten erzeugen
anzahl_keys = 10
anzahl_daten = 1000
anzahl_files = 100
keys = ["key_" + str(x) for x in range(anzahl_keys)]
for file in range(anzahl_files):
if file == 1:
filename = "new_file.csv"
else:
filename = "file_nr_"+ str(file)+".csv"
pd.DataFrame(
data = np.concatenate((np.random.choice(keys, (anzahl_daten, 1)),
np.random.standard_normal((anzahl_daten, 1))), axis=1),
columns = ["key","value"]).to_csv(my_path + filename)
# daten lesen und auf die keys in der neusten filtern.
new_df = pd.read_csv(my_path + "new_file.csv")
new_keys = new_df["key"].drop_duplicates()
old_dfs = pd.concat([pd.read_csv(file).merge(new_keys,on=["key"], how = "inner")
for file in list(filter(lambda x: "new_file" not in x,glob.glob(os.path.join(my_path , "*.csv"))))])
all = pd.concat([new_df,old_dfs])
print("zeit? " + str( (time.time() - start_time)) )
Du müsstest konkreter werden was genau dein Ziel ist. Was sind die zwei Dimensionen? Der neue Wert und die "ähnlichen" (was heisst das?) Werte der alten Daten? Sind die Werte in der neuen csv eindeutig?
__________________
Forum-Besserwisser und Wissenschafts-Faschist