Pandas: création de DataFrame à partir D'une série
Mon code actuel est indiqué ci - dessous- je suis de l'importation d'un TAPIS de fichier et essayer de créer un DataFrame de variables à l'intérieur:
mat = loadmat(file_path) # load mat-file
Variables = mat.keys() # identify variable names
df = pd.DataFrame # Initialise DataFrame
for name in Variables:
B = mat[name]
s = pd.Series (B[:,1])
donc dans la boucle je peux créer une série de chaque variable (ce sont des tableaux avec deux colonnes - donc les valeurs dont j'ai besoin sont dans la colonne 2)
ma question Est Comment puis-je ajouter la série à la base de données? J'ai parcouru la documentation et aucun des exemples ne semble correspondre à ce que j'essaie de faire.
Meilleur Cordialement,
Ben
3 réponses
Voici comment créer une DataFrame où chaque série est une ligne.
Pour une seule Série (résultant en une seule ligne DataFrame):
series = pd.Series([1,2], index=['a','b'])
df = pd.DataFrame([series])
pour les séries multiples avec des indices identiques:
cols = ['a','b']
list_of_series = [pd.Series([1,2],index=cols), pd.Series([3,4],index=cols)]
df = pd.DataFrame(list_of_series, columns=cols)
pour les séries multiples avec éventuellement des indices différents:
list_of_series = [pd.Series([1,2],index=['a','b']), pd.Series([3,4],index=['a','c'])]
df = pd.concat(list_of_series, axis=1).transpose()
pour créer une base de données où chaque série est une colonne, voir les réponses par d'autres. Alternativement, on peut créer une base de données où chaque série est une ligne, comme ci-dessus, puis utilisez df.transpose()
. Cependant, la dernière approche est inefficace si les colonnes ont des types de données différents.
pas besoin d'initialiser une DataFrame vide (vous ne le faisiez même pas, vous auriez besoin de pd.DataFrame()
avec les parenthèses).
au lieu de cela, pour créer une base de données où chaque série est une colonne,
- faire une liste de Série,
series
et - concaténer horizontalement avec
df = pd.concat(series, axis=1)
quelque Chose comme:
series = [pd.Series(mat[name][:, 1]) for name in Variables]
df = pd.concat(series, axis=1)
je suppose qu'une autre façon, peut-être plus rapide, d'atteindre ceci est
1) Utilisez la compréhension de dict pour obtenir le dict désiré (c.-à-d., en prenant la deuxième couleur de chaque tableau)
2) alors utilisez pd.DataFrame
pour créer une instance directement à partir du dict sans boucle sur chaque col et concat.
en supposant votre mat
ressemble à ceci (vous pouvez ignorer ce depuis votre mat
est chargé à partir du fichier):
In [135]: mat = {'a': np.random.randint(5, size=(4,2)),
.....: 'b': np.random.randint(5, size=(4,2))}
In [136]: mat
Out[136]:
{'a': array([[2, 0],
[3, 4],
[0, 1],
[4, 2]]), 'b': array([[1, 0],
[1, 1],
[1, 0],
[2, 1]])}
Ensuite, vous pouvez faire:
In [137]: df = pd.DataFrame ({name:mat[name][:,1] for name in mat})
In [138]: df
Out[138]:
a b
0 0 0
1 4 1
2 1 0
3 2 1
[4 rows x 2 columns]