web-dev-qa-db-fra.com

Est-il possible d’ajouter Series aux lignes de DataFrame sans créer de liste au préalable?

J'ai des données que j'essaye de classer dans une DataFrame dans Pandas. J'essayais de rendre chaque ligne une Series et de l'ajouter à la DataFrame. J'ai trouvé un moyen de le faire en ajoutant la Series à une list vide et en convertissant ensuite la list de Series en une DataFrame

par exemple. DF = DataFrame([series1,series2],columns=series1.index)

Cette étape list à DataFrame semble excessive. J'ai vérifié quelques exemples ici, mais aucune des Series n'a conservé les étiquettes Index de Series pour les utiliser en tant qu'étiquettes de colonne.

Mon long chemin où les colonnes sont id_names et les lignes sont type_names:  enter image description here

Est-il possible d’ajouter Series aux lignes de DataFrame sans créer de liste au préalable?

#!/usr/bin/python

DF = DataFrame()
for sample,data in D_sample_data.items():
    SR_row = pd.Series(data.D_key_value)
    DF.append(SR_row)
DF.head()

TypeError: Can only append a Series if ignore_index=True or if the Series has a name

Puis j'ai essayé

DF = DataFrame()
for sample,data in D_sample_data.items():
    SR_row = pd.Series(data.D_key_value,name=sample)
    DF.append(SR_row)
DF.head()

DataFrame vide

Essayé Insère une ligne dans la base de données pandas Toujours en train de récupérer une base de données vide: /

J'essaie de faire en sorte que la série soit les lignes, l'index de la série devenant les étiquettes de colonne du DataFrame

18
O.rka

Un moyen plus simple serait peut-être d’ajouter le pandas.Series au pandas.DataFrame avec l’argument ignore_index=True à DataFrame.append(). Exemple -

DF = DataFrame()
for sample,data in D_sample_data.items():
    SR_row = pd.Series(data.D_key_value)
    DF = DF.append(SR_row,ignore_index=True)

Démo -

In [1]: import pandas as pd

In [2]: df = pd.DataFrame([[1,2],[3,4]],columns=['A','B'])

In [3]: df
Out[3]:
   A  B
0  1  2
1  3  4

In [5]: s = pd.Series([5,6],index=['A','B'])

In [6]: s
Out[6]:
A    5
B    6
dtype: int64

In [36]: df.append(s,ignore_index=True)
Out[36]:
   A  B
0  1  2
1  3  4
2  5  6

Un autre problème dans votre code est que DataFrame.append() n’est pas en place, il renvoie le cadre de données ajouté, vous devrez le réassocier à votre cadre de données d’origine pour que cela fonctionne. Exemple -

DF = DF.append(SR_row,ignore_index=True)

Pour conserver les étiquettes, vous pouvez utiliser votre solution pour inclure le nom de la série et attribuer à DataFrame ajouté à DF. Exemple -

DF = DataFrame()
for sample,data in D_sample_data.items():
    SR_row = pd.Series(data.D_key_value,name=sample)
    DF = DF.append(SR_row)
DF.head()
35
Anand S Kumar

DataFrame.append ne modifie pas le DataFrame en place. Vous devez faire df = df.append(...) si vous souhaitez le réaffecter à la variable d'origine.

10
BrenBarn

Quelque chose comme ça pourrait marcher ...

mydf.loc['newindex'] = myseries

Voici un exemple où je l'ai utilisé ...

stats = df[['bp_prob', 'ICD9_prob', 'meds_prob', 'regex_prob']].describe()

stats
Out[32]: 
          bp_prob   ICD9_prob   meds_prob  regex_prob
count  171.000000  171.000000  171.000000  171.000000
mean     0.179946    0.059071    0.067020    0.126812
std      0.271546    0.142681    0.152560    0.207014
min      0.000000    0.000000    0.000000    0.000000
25%      0.000000    0.000000    0.000000    0.000000
50%      0.000000    0.000000    0.000000    0.013116
75%      0.309019    0.065248    0.066667    0.192954
max      1.000000    1.000000    1.000000    1.000000

medians = df[['bp_prob', 'ICD9_prob', 'meds_prob', 'regex_prob']].median()

stats.loc['median'] = medians

stats
Out[36]: 
           bp_prob   ICD9_prob   meds_prob  regex_prob
count   171.000000  171.000000  171.000000  171.000000
mean      0.179946    0.059071    0.067020    0.126812
std       0.271546    0.142681    0.152560    0.207014
min       0.000000    0.000000    0.000000    0.000000
25%       0.000000    0.000000    0.000000    0.000000
50%       0.000000    0.000000    0.000000    0.013116
75%       0.309019    0.065248    0.066667    0.192954
max       1.000000    1.000000    1.000000    1.000000
median    0.000000    0.000000    0.000000    0.013116
3
Selah

Essayez d'utiliser cette commande. Voir l'exemple donné ci-dessous:

 Before image

df.loc[len(df)] = ['Product 9',99,9.99,8.88,1.11]

df

 After Image