2016-11-07 17 views
5

मैं जो इस तरह दिखता है स्ट्रिंग की एक सूची है:अजगर पांडा परिवर्तित कॉमा सेपरेटेड वैल्यूज़ की सूची dataframe को

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

मैं एक DataFrame कि इस तरह दिखता है में यह सूची कन्वर्ट करने के लिए करना चाहते हैं:

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

Bob | Engineering | 45000 

इस बारे में जाने का सबसे आसान तरीका क्या होगा? मेरे पेट एक सीएसवी और regex के साथ अलग खिताब में डेटा फेंक कहते हैं, "^ *:।", लेकिन एक सरल तरीका

+0

यह बहुत सरल है। इसलिए, इससे पहले कि हम आपको जवाब दें, आपने जवाब खोजने के लिए क्या किया है? * संकेत: * यह k => v जोड़े की एक अल्पविराम सीमांकित स्ट्रिंग सरणी है (':' द्वारा सीमित) – Fallenreaper

उत्तर

8

कुछ स्ट्रिंग के साथ आप प्रसंस्करण dicts की एक सूची प्राप्त और DataFrame निर्माता है कि पारित कर सकते हैं:

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

आप इसे इस तरह से कर सकते हैं वहाँ होना चाहिए:

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

एक छोटे से रचनात्मक

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

सेटअप

l = ["Name: Alice, Department: HR, Salary: 60000", 
    "Name: Bob, Department: Engineering, Salary: 45000"] 
s = pd.Series(l) 
संबंधित मुद्दे