2015-07-31 10 views
5

Mam kilka plików CSV z wartościami takimi jak ten w folderze:wartości Bin podstawie zakresów z pand

GroupID.csv jest nazwa pliku. Istnieje wiele takich plików, ale zakresy wartości są zdefiniowane w tym samym pliku XML. Próbuję je zgrupować Jak mogę to zrobić?

UPDATE1: podstawie wypowiedzi BobHaffner, w Zrobiłem to

import pandas as pd 
import glob path =r'path/to/files' 
allFiles = glob.glob(path + "/*.csv") 
frame = pd.DataFrame() 
list_ = [] 
for file_ in allFiles: 
    df = pd.read_csv(file_,index_col=None, header=None) 
    df['file'] = os.path.basename('path/to/files/'+file_) 
    list_.append(df) 
frame = pd.concat(list_) 
print frame 

dostać coś takiego:

muszę do grupy wartości oparte na koszach z pliku XML. Naprawdę doceniam każdą pomoc.

+1

Jest tu kilka pytań. Sugerowałbym, aby spróbować csvs w jednej ramce danych jako dobry pierwszy krok. Sprawdź moduł glob i pandy read_csv() i concat() –

+0

@BobHaffner Mogę to zrobić. Podczas konkatenacji utraciłoby to nazwę pliku. Czy nie tak? – pam

+0

Można utworzyć dodatkowe pole w każdej ramce danych z nazwą pliku. To zadziała, prawda? –

Odpowiedz

5

W celu wiadro swoją serię, należy użyć the pd.cut() function, tak:

df['bin'] = pd.cut(df['1'], [0, 50, 100,200]) 

     0 1  file   bin 
0 person1 24  age.csv  (0, 50] 
1 person2 17  age.csv  (0, 50] 
2 person3 98  age.csv (50, 100] 
3 person4 6  age.csv  (0, 50] 
4 person2 166 Height.csv (100, 200] 
5 person3 125 Height.csv (100, 200] 
6 person5 172 Height.csv (100, 200] 

Jeśli chcesz wymienić pojemniki siebie, można użyć labels= argumentu, tak:

df['bin'] = pd.cut(df['1'], [0, 50, 100,200], labels=['0-50', '50-100', '100-200']) 

     0 1  file  bin 
0 person1 24  age.csv  0-50 
1 person2 17  age.csv  0-50 
2 person3 98  age.csv 50-100 
3 person4 6  age.csv  0-50 
4 person2 166 Height.csv 100-200 
5 person3 125 Height.csv 100-200 
6 person5 172 Height.csv 100-200