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:
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
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()
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.
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