web-dev-qa-db-fra.com

Pandas Python: Convertissez la sortie ".value_counts" en image

Bonjour, je souhaite connaître le nombre de valeurs uniques du cadre de données. count_values ​​implémente ceci mais je veux utiliser sa sortie ailleurs. Comment puis-je convertir la sortie .count_values ​​en un fichier de données pandas. voici un exemple de code:

import pandas as pd
df = pd.DataFrame({'a':[1, 1, 2, 2, 2]})
value_counts = df['a'].value_counts(dropna=True, sort=True)
print(value_counts)
print(type(value_counts))

la sortie est:

2    3
1    2
Name: a, dtype: int64
<class 'pandas.core.series.Series'>

Ce dont j'ai besoin, c'est d'un dataframe comme ceci:

unique_values  counts
2              3
1              2

Je vous remercie. 

17
s900n

Utilisez rename_axis pour le nom de la colonne de l'index et reset_index :

df = value_counts.rename_axis('unique_values').reset_index(name='counts')
print (df)
   unique_values  counts
0              2       3
1              1       2

Ou si besoin d'une colonne DataFrame, utilisez Series.to_frame :

df = value_counts.rename_axis('unique_values').to_frame('counts')
print (df)
               counts
unique_values        
2                   3
1                   2
22
jezrael

Je viens de rencontrer le même problème, alors je présente mes réflexions ici.

Attention

Lorsque vous traitez avec la structure de données de Pandas, vous devez connaître le type return.

Une autre solution ici

Comme @jezrael mentionné précédemment, Pandas fournit une API pd.Series.to_frame

Étape 1

Vous pouvez également envelopper le pd.Series à pd.DataFrame simplement en faisant

df_val_counts = pd.DataFrame(value_counts) # wrap pd.Series to pd.DataFrame

Ensuite, vous avez un pd.DataFrame avec le nom de colonne 'a' et votre première colonne devient l’index.

Input:  print(df_value_counts.index.values)
Output: [2 1]

Input:  print(df_value_counts.columns)
Output: Index(['a'], dtype='object')

Étape 2

Et maintenant?

Si vous souhaitez ajouter de nouveaux noms de colonne ici, en tant que pd.DataFrame, vous pouvez simplement réinitialiser l'index à l'aide de l'API de reset_index () .

Et puis, changez le nom de la colonne par une liste par API df.coloumns

df_value_counts = df_value_counts.reset_index()
df_value_counts.columns = ['unique_values', 'counts']

Ensuite, vous avez ce dont vous avez besoin

Output:

       unique_values    counts
    0              2         3
    1              1         2

Réponse complète ici

import pandas as pd

df = pd.DataFrame({'a':[1, 1, 2, 2, 2]})
value_counts = df['a'].value_counts(dropna=True, sort=True)

# solution here
df_val_counts = pd.DataFrame(value_counts)
df_value_counts = df_value_counts.reset_index()
df_value_counts.columns = ['unique_values', 'counts'] # change column names
0
Wei Yuang Hsu