2017-05-18 3 views
2

J'ai trois listes remplies de données et je voudrais les concaténer pour créer une trame de donnéesComment diviser la série en deux colonnes pandas

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

La structure des données pour les trois listes:

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 

..

je les transforme en série et les concate:

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) 

par contre ici, j'ai un problème, dans chaque colonne, il considère le nom de l'ancienne colonne et son indice de la valeur

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 

Je testé la fonction split:

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

mais cela ne fonctionne pas, Lorsque je tente de diviser ces colonnes, ce qui arrive:

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

est-il possible d'avoir que les valeurs f ou chaque colonne:

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 

Répondre

0

Je pense que vous avez besoin pour diviser apply avec str.split et en sélectionnant avec 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 

Une autre solution est d'utiliser list comprehension pour séparer:

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

Qu'en est-il de la réponse éditée? – jezrael

+0

Erreur: AttributeError: l'objet 'Series' n'a pas d'attribut 'set_index' – KinWolf

+0

Désolé, pouvez-vous ajouter 'print (data_activationsLV [: 10])' à la question? – jezrael

0

si vous avez listes de longueur égale, vous pouvez simplement créer un dataframe vide et le remplir:

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

Les listes n'ont pas la même longueur – KinWolf