2017-11-20 1 views
0

Ich möchte einige CSVs aus einem bestimmten Verzeichnis lesen und die resultierenden Datenframes ähnlich wie der Name des CSV benennen. Also habe ich den Code geschrieben, aber ich bin mir bewusst, dass es nicht die richtige Syntax ist. Neben habe ich den Fehler:read_csv Benennung der resultierenden Datenframes

TypeError: 'str' object does not support item assignment 

Mein Code:

import os  
for element in os.listdir('.'): 
     element[:-4] = read_csv(element) 

Danke für Ihre Hilfe

+0

Setzen Sie Ihre Datenrahmen in einem Wörterbuch folgt? 'dfs = {}' dann 'für Element in os.listdir ('.'): dfs [Element [: - 4]] = pd.read_csv (Element)'? –

+0

Vielen Dank für Ihre Antwort. es ist eine großartige Idee, aber ich sollte immer noch auf die Datenrahmen von dfs ["element1"] zugreifen ... Gibt es eine andere Möglichkeit, direkt Element1 = DataFrame (element1) zu haben. Danke – Amy21

+0

Wenn es nicht existiert oder es schwierig ist, werde ich die Wörterbücher benutzen. Vielen Dank. – Amy21

Antwort

0

Sie können den globalen Bereich tun, indem Add Anlassen wie folgt:

import os 
for i in os.listdir('.'): 
    globals()[i] = pd.read_csv(i) 

Aber das ist sehr hässlich und, wie @ JonClements darauf hingewiesen, wird nicht funktionieren, wenn der Dateiname tun Es folgt nicht den Namensregeln der Python-Variablen. Zur Erinnerung sind Regeln für Variablennamen:

Variables names must start with a letter or an underscore, such as: 
_underscore 
underscore_ 
The remainder of your variable name may consist of letters, numbers and underscores. 
password1 
n00b 
un_der_scores 

Überprüfung dieses link für weitere Erklärung.


Der beste Weg ist es, ein Wörterbuch zu erstellen:

import os 
d = {} 
for i in os.listdir('.'): 
    d[i] = pd.read_csv(i) 

Dann können Sie jeden Datenrahmen Sie Zugriff als d['file1.csv']

+0

Nicht nur hässlich ... Was ist, wenn Ihr Dateiname 'some-file' ist - versuchen Sie es wieder zu bekommen use :) (außerhalb des allgemeinen Falls zu wissen, welche Variablen du in Globals geschoben hast, die Dataframes sind und welche nicht ...) –

+0

Und man könnte das auch gleich diktieren: 'dfs = {fname [ : -4]: pd.read_csv (fname) für fname in os.listdir ('.') 'Etc ... –

+0

@ JonClem ja, du hast Recht. Ich habe meine Antwort aktualisiert, um darauf hinzuweisen, dass es nicht funktioniert, wenn der Variablenname nicht der Konvention von Python entspricht. Vielen Dank. – MedAli