2016-04-14 3 views
0

Ich lese 40 CSVs mit monatlichen Daten. Die Dateien haben die gleiche Spaltenstruktur, sind aber unterschiedlich lang. Entscheidend ist, dass die Daten keine Identifikatoren für die einzelnen Monate enthalten.Pandas fügen beim Lesen mehrerer Dateien eine neue Spaltenkennung hinzu

Wie könnten Sie dem verketteten DataFrame eine neue 'Monat'-Spalte hinzufügen, in der die Zeilen für Monat 1 eine 1, die Zeile für Monat 2 eine 2 usw. haben. Ich bin fast dabei, aber nach zahlreichen Iterationen Ich kann es einfach nicht zum Laufen bringen.

import glob 
path = r'/Users/Name/Downloads/' 
allFiles = glob.glob(path + '/*.csv') 
frame = pd.DataFrame() 
list_ = [] 
month = 0 

for file_ in allFiles: 
    data = pd.read_excel(file_, parse_dates=True) 
    list_.append(data) 
    data['month'] = month += 1 # This is the line I can't get right 
firstData = pd.concat(list_, ignore_index=True) 
+0

diese Daten ['Monat' + Str (Monat)] = Monat + 1 – MedAli

Antwort

1

Eine Verbesserung der Antwort von Mathias711. Wie ich es verstehe, brauchen Sie keine separate Spalte für jeden Monat. So sollen Sie Ihre i in die gleiche month Spalte einfügen:

for i, file_ in enumerate(allFiles): 
    data = pd.read_excel(file_, parse_dates=True) 
    data['month'] = i # here is the change 
    list_.append(data) 

So eine month Spalte in dem verketteten Datenrahmen für jeden Zeilenindex der Quelldatei enthält.

Blick auf Ihren Code sehe ich Syntaxfehler: Sie versuchen, den Zähler in der gleichen Zeile zu erhöhen wie die Zuordnung zu den Spaltenwerten. Sie fügen auch month Spalte nach Sie haben bereits die data an die list_ angefügt. So etwas sollte funktionieren:

month = 0 
for file_ in allFiles: 
    data = pd.read_excel(file_, parse_dates=True) 
    data['month'] = month 
    month += 1 
    list_.append(data) 

jedoch die Entscheidung mit enumerate eleganter und pythonic ist. :)

1

Mit einem enumerate Sie die Kennung, die Sie benötigen, benennen Sie die Spalte mit dieser Kennung darin:

for i, file_ in enumerate(allFiles): 
    data = pd.read_excel(file_, parse_dates=True) 
    data.rename(columns={'month': 'month_{}'.format(i)}) 
    list_.append(data) 
1

, wenn Sie so etwas wie

month1, month2 
1  , 2 
1  , 2 

erhalten möchten, können Sie tun Sie dies:

data['month'+str(month)] = month + 1 
list_.append(data) 

, wenn Sie so etwas wie dies für die erste Iteration

month 
1  
1  

für die zweite Iteration

month 
2  
2  

Sie können dies tun zu wollen:

data['month'] = month + 1 
list_.append(data) 

Beachten Sie, dass die list_.append(..) muss treten auf, nachdem Sie dem Datenrahmen einen Monat hinzugefügt haben.

Verwandte Themen