2016-11-07 25 views
5

dataframe dönüştürmek:Python pandalar virgülle ayrılmış değerler listesi Şöyle dizeleri bir listesi var

["Name: Alice, Department: HR, Salary: 60000", "Name: Bob, Department: Engineering, Salary: 45000"] 

ben şöyle bir DataFrame Bu listeyi dönüştürmek istiyoruz:

Name | Department | Salary 
-------------------------- 
Alice | HR | 60000 

Bob | Engineering | 45000 

Bu konuda gitmenin en kolay yolu ne olurdu? "^ *:" Yüreğim bir CSV ve regex ile ayrı başlıklar halinde veriyi atmak diyor, ama

+0

Bu oldukça basittir. Yani, size cevabı vermeden önce, cevabı kendiniz bulmak için ne yaptınız? * İpucu: * k => v çiftlerinin virgülle ayrılmış bir dizisi dizisidir (': 'ile sınırlandırılmıştır) – Fallenreaper

cevap

8

size işleme dicts bir listesini almak ve DataFrame kurucusuna o iletebilirsiniz:

lst = ["Name: Alice, Department: HR, Salary: 60000", 
     "Name: Bob, Department: Engineering, Salary: 45000"] 
pd.DataFrame([dict([kv.split(': ') for kv in record.split(', ')]) for record in lst]) 
Out: 
    Department Name Salary 
0   HR Alice 60000 
1 Engineering Bob 45000 
3

Eğer bu şekilde yapabiliriz basit yolu olmalı: Bazı dize ile

In [271]: s 
Out[271]: 
['Name: Alice, Department: HR, Salary: 60000', 
'Name: Bob, Department: Engineering, Salary: 45000'] 

In [272]: pd.read_csv(io.StringIO(re.sub(r'\s*(Name|Department|Salary):\s*', r'', '~'.join(s))), 
    ...:    names=['Name','Department','Salary'], 
    ...:    header=None, 
    ...:    lineterminator=r'~' 
    ...:) 
    ...: 
Out[272]: 
    Name Department Salary 
0 Alice   HR 60000 
1 Bob Engineering 45000 
3

biraz yaratıcı

s.str.extractall(r'(?P<key>[^,]+)\s*:(?P<value>[^,]+)') \ 
    .reset_index('match', drop=True) \ 
    .set_index('key', append=True).value.unstack() 

enter image description here

kurulum

l = ["Name: Alice, Department: HR, Salary: 60000", 
    "Name: Bob, Department: Engineering, Salary: 45000"] 
s = pd.Series(l)