2017-05-05 2 views
1

Ich habe einen Variablennamen "Inventar", der folgende Daten hat. Wie lade ich die Daten von dieser Variable in einen Pandas Datenrahmen. Wenn Schlüssel = Wert vorhanden ist, möchte ich den Schlüssel als Spaltennamen verwenden.laden Daten von Python-Variablen in Pandas Datenrahmen

print (inventory)  
2017-05-01,pink,name=apple,quantity=6,orange,place=america 
2017-05-03,pink,name=mango,quantity=1,orange,place=europe 
2017-05-04,pink,name=apple,quantity=4,orange,place=africa 
+0

Was würden Sie anders als Spaltennamen verwenden? –

Antwort

0

Verwenden pd.DataFrame mit einem Verständnis

inventory = """2017-05-01,pink,name=apple,quantity=6,orange,place=america 
2017-05-03,pink,name=mango,quantity=1,orange,place=europe 
2017-05-01,pink,name=apple,quantity=4,orange,place=africa""" 

lol = [l.split(',') for l in inventory.splitlines()] 

d1 = pd.DataFrame([[i for i in row if '=' not in i] for row in lol]) 
d2 = pd.DataFrame(
    [dict([tuple(i.split('=')) for i in row if '=' in i]) for row in lol] 
) 
d1.join(d2) 

      0  1  2 name place quantity 
0 2017-05-01 pink orange apple america  6 
1 2017-05-03 pink orange mango europe   1 
2 2017-05-01 pink orange apple africa  4 
+0

Was ist mit den Datums- und Farbspalten, die keine Schlüssel/Wert-Paare sind? –

+0

OP sagte ** wenn ** Schlüssel/Wert-Paar, als Spaltenname verwenden ... so übersprang ich die anderen. OP muss anders klarstellen. – piRSquared

+0

danke für Ihre Antwort. Für Daten, die nicht im Schlüssel/Wert-Paar sind, möchte ich, dass Pandas ihm einen Spaltennamen geben (Standard - 0, 1, 5 usw.). Ich kann das später umbenennen. – Sun

1

ich es so zu lösen versucht:

import pandas as pd 
inventory = \ 
"""2017-05-01,pink,name=apple,quantity=6,orange,place=america 
2017-05-03,pink,name=mango,quantity=1,orange,place=europe 
2017-05-04,pink,name=apple,quantity=4,orange,place=africa""" 
content = [line.split(',') for line in inventory.splitlines()] 

# prepare column names to be changed and clean the data 
columns_to_be_rename = {} 
for line in content: 
    for i, s in enumerate(line): 
     if '=' in s: 
      columns_to_be_rename[i], line[i] = s.split('=') 

df = pd.DataFrame(content) 
df.rename(columns = columns_to_be_rename) 


      0 1  name quantity 4 place 
0 2017-05-01 pink apple  6 orange america 
1 2017-05-03 pink mango  1 orange europe 
2 2017-05-04 pink apple  4 orange africa 
Verwandte Themen