2016-04-14 21 views
0

Aylık veriyle 40 CSV adlı okumayı okuyorum. Dosyalar aynı sütun yapısını paylaşır ancak farklı uzunluktadır. Önemli olarak, veriler aylar için herhangi bir tanımlayıcı içermez.Pandalar, birden fazla dosya okunurken yeni bir sütun tanımlayıcısı ekler

Ay 1 için satırların 1, satır 2 için satır 2, vb. Olduğu birleştirilmiş bir DataFrame için yeni bir 'month' sütunu ekleyebilirsiniz. Yinelemeler işe yaramaz. İhtiyacınız tanımlayıcı var bir enumerate ile

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

Bu veriyi yapmak için ['month' + str (month)] = month + 1 – MedAli

cevap

1

Mathias711'in cevabına bir gelişme. Anladığım kadarıyla, her ay için ayrı bir sütuna ihtiyacınız yok. Yani aynı month sütuna sizin i eklemek gerekir:

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

Yani, birleştirilmiş DataFrame bir month sütun her satır için kaynak dosyasının indeksini içerecektir.

Kodunuza baktığımda sözdizimi hatası görüyorum: Sayacınızı sütun değerlerine atamakla aynı satırda artırmayı deneyin. Ayrıca,'dan sonra sütun ekledikten sonra data ekini list_'a eklediniz. Böyle bir şey çalışması gerekir:

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

Ancak enumerate ile karar daha şık ve pythonic olduğunu. :)

1

, sadece içinde bu tanımlayıcı ile sütunu yeniden adlandırmak:

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

Eğer

month1, month2 
1  , 2 
1  , 2 

yapabilirsiniz gibi bir şey almak istiyorsanız Bunu yapın:

data['month'+str(month)] = month + 1 
list_.append(data) 
Eğer ikinci tekrarında ilk yineleme

month 
1  
1  

için

month 
2  
2  

böyle bir şey almak istiyorsanız 210

bunu yapabilirsin:

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

Bildirimi list_.append(..) zorunda olduğu Dataframe'e ay ekledikten sonra ortaya çıkar.

İlgili konular