2017-05-18 9 views
2

Ich habe drei Listen mit Daten gefüllt und ich würde sie verketten wie einem DatenrahmenWie Serie in zwei Spalten aufgeteilt Pandas

type of data_activationsLV : list 
type of data_activationsF : list 
type of data_activationsPC : list 

Die Struktur der Daten für die drei Listen zu erstellen:

data_activationsLV  data_activationsF  data_activationsPC 
    index a   index  b    index  c 
    14468 7.8  14468  7.2   14468  7.6   
    14469 7.8  14469  7.1   14469  7.0 
    14470 7.9  14470  7.9   14470  8.1 
    14471 8.2  14471  9.5   14471  9.9 

..

ich sie in Serie verwandeln und concate sie:

df15LV = pd.Series(data_activationsLV) 
df15F = pd.Series(data_activationsF) 
df15PC = pd.Series(data_activationsPC) 

dfnew2=pd.concat([df15LV,df15F,df15PC], ignore_index=True, axis=1) 

durch Nachteile hier habe ich ein Problem, in jeder Spalte, hält es den Namen des alten Spalts und seinen Index mit dem Wert

index 0    1    2 
0  a14468 7.8 b14468 7.2  c14468 7.6 
1  a14469 7.8 b14469 7.1  c14469 7.0 
2  a14470 7.9 b14470 7.9  c14470 8.1 
3  a14471 8.2 b14471 9.5  c14471 9.9 

ich die Split-Funktion So getestet:

dfnew2['a'] = dfnew2[2].split(' ') 

aber es hat nicht funktioniert, wenn ich versuche, diese in Spalten zu teilen, das ist, was passiert:

AttributeError: 'Series' object has no attribute 'split' 

ist es möglich, nur die Werte f haben oder jede Spalten:

index df15LV  df15F  df15PC 
0  7.8  7.2  7.6 
1  7.8  7.1  7.0 
2  7.9  7.9  8.1 
3  8.2  9.5  9.9 

Antwort

0

Ich glaube, Sie brauchen für apply mit str.split Aufspalten und die Auswahl mit str[1]:

print (data_activationsLV) 
['14468 7.8', '14469 7.8'] 

print (data_activationsF) 
['14468 7.2', '14469 7.1', '14470 7.9', '14471 9.5'] 

print (data_activationsPC) 
['14468 7.6', '14470 8.1', '14471 9.9'] 

df15LV = pd.Series(data_activationsLV) 
df15F = pd.Series(data_activationsF) 
df15PC = pd.Series(data_activationsPC) 

dfnew2=pd.concat([df15LV,df15F,df15PC], axis=1) 
dfnew2 = dfnew2.apply(lambda x: x.str.split().str[1]) 
#if necessary convert to float 
dfnew2 = dfnew2.astype(float) 
print (dfnew2) 
    0 1 2 
0 7.8 7.2 7.6 
1 7.8 7.1 8.1 
2 NaN 7.9 9.9 
3 NaN 9.5 NaN 

Eine andere Lösung ist list comprehension zum Spalten verwenden:

print (data_activationsLV) 
['7.8', '7.8'] 
print (data_activationsF) 
['7.2', '7.1', '7.9', '9.5'] 

print (data_activationsPC) 
['7.6', '8.1', '9.9'] 

df15LV = pd.Series(data_activationsLV) 
df15F = pd.Series(data_activationsF) 
df15PC = pd.Series(data_activationsPC) 

dfnew2=pd.concat([df15LV,df15F,df15PC], axis=1) 
#if necessary convert to float 
dfnew2 = dfnew2.astype(float) 
print (dfnew2) 
    0 1 2 
0 7.8 7.2 7.6 
1 7.8 7.1 8.1 
2 NaN 7.9 9.9 
3 NaN 9.5 NaN 
+0

Was ist mit editierter Antwort? – jezrael

+0

Fehler: AttributeError: 'Series' -Objekt hat kein Attribut 'set_index' – KinWolf

+0

Sorry, können Sie 'print (data_activationsLV [: 10])' zur Frage hinzufügen? – jezrael

0

wenn Sie Listen gleicher Länge, könnten Sie einfach einen leeren Datenrahmen erstellen und füllen Sie es:

data_activationsLV = [7.8,7.8,7.9,8.2] 
data_activationsF = [7.2,7.1,7.9,9.5] 
# create an empty dataframe 
columns = ['LV', 'F'] 
index = np.arange(len(data_activationsLV)) # array of numbers for the number of rows 
df = pd.DataFrame(columns=columns, index = index) 
df['LV'] = data_activationsLV 
df['F'] = data_activationsF 
df 
+0

Die Listen haben nicht die gleiche Länge – KinWolf

Verwandte Themen