2017-04-01 1 views
1

J'ai deux questions concernant les données de trame de données d'écriture dans un fichier:Comment écrire un plusieurs dataframes à même feuille sans dupliquer la colonne des étiquettes

Mon programme produit des statistiques sommaires sur le nombre de lignes groupées d'une trame de données et sauver ceux à StringIO buffer qui écrit dans mon fichier output.csv à la fin. J'ai le sentiment que le pd.concat conviendrait mieux, mais je ne pouvais pas le faire fonctionner. Je peux essayer d'ajouter un extrait de code quand j'ai une chance et j'espère que quelqu'un peut expliquer comment concaturer correctement et je suppose que cela va résoudre mon problème. Cela dit, mon programme fonctionne et c'est plus que ce que je peux demander. Ce qui m'embête, cependant, c'est de savoir comment le fichier CSV finit par répéter les mêmes étiquettes de colonne pour chaque image de données de résumé qui a été écrite dans le tampon et accessoirement dans mon fichier CSV. Existe-t-il un moyen d'écrire les étiquettes de colonnes une seule fois et d'éviter plusieurs lignes d'étiquettes en double?

Ma deuxième question concerne l'écriture dans Excel pour ignorer une copie et un collage inutiles. Comme mon précédent numéro, ce n'est qu'un obstacle mineur mais il me dérange encore car je voudrais faire les choses comme il faut. Le problème est que je veux que tous les cadres écrits sur la même feuille. Afin d'éviter d'écraser les mêmes données, il est nécessaire d'utiliser un tampon pour stocker les données jusqu'à la fin. Aucun des documents n'a semblé utile dans ma situation particulière. J'ai conçu une solution de contournement: xlwt pour buffer -> output.write (buffer.getvalue()) -> pd.to_csv (output), puis réimporter ce même fichier via pd.read_csv et enfin ajouter un autre writer qui écrit la dataframe dans Excel. Après tout ce travail, je me suis contenté de coller à la simplicité de CSV, car l'éditeur Excel a amplifié la laideur des lignes en double. Toutes les suggestions sur la façon dont mon problème de tampon peut être mieux traité car je préférerais la rationalisation et le contrôle de l'écrivain Excel à une sortie CSV.

Désolé de ne pas avoir de code pour le contexte. Je me suis fatigué de mon mieux pour expliquer sans cela. Si nécessaire, je peux ajouter le code quand j'ai une chance gratuite.

+0

Pour votre deuxième question s'il vous plaît voir: http://stackoverflow.com/questions/32957441/putting-many-python-pandas -dataframes-to-one-excel-worksheet – bernie

+0

Cela ne fonctionnera pas pour moi puisque je dois d'abord initialiser une base de données vide, quelque chose que je ne peux pas faire. – Maksim

+0

@Maksim Votre question est assez générale, veuillez inclure le code afin que les gens puissent vous aider. – splinter

Répondre

2

Je suis d'accord que la concaténation des données est probablement une meilleure solution. Vous devriez probablement poser une question spécifiquement pour cela avec quelques exemples de codes/dataframes. Pour votre deuxième question, vous pouvez positionner une image dans une feuille de calcul Excel à l'aide des paramètres startrow et startcol. Vous pouvez ignorer l'en-tête répété à l'aide du paramètre booléen header et ignorer l'index à l'aide du paramètre booléen index.

Par exemple:

import pandas as pd 


# Create some Pandas dataframes from some data. 
df1 = pd.DataFrame({'Data': [11, 12, 13, 14]}) 
df2 = pd.DataFrame({'Data': [21, 22, 23, 24]}) 
df3 = pd.DataFrame({'Data': [31, 32, 33, 34]}) 
df4 = pd.DataFrame({'Data': [41, 42, 43, 44]}) 

# Create a Pandas Excel writer using XlsxWriter as the engine. 
writer = pd.ExcelWriter('pandas_test.xlsx', engine='xlsxwriter') 

# Add the first dataframe to the worksheet. 
df1.to_excel(writer, sheet_name='Sheet1', index=False) 

offset = len(df1) + 1 # Add extra row for column header. 

# Add the other dataframes. 
for df in (df2, df3, df4): 
    # Write the datafram without a column header or index. 
    df.to_excel(writer, sheet_name='Sheet1', startrow=offset, 
       header=False, index=False) 

    offset += len(df) 

# Close the Pandas Excel writer and output the Excel file. 
writer.save() 

Sortie:

enter image description here

+0

Merci! La ligne de décalage est simple mais brillante. – Maksim

+0

Voici ma question à la première partie avec l'exemple de code: http://stackoverflow.com/questions/43170601/how-to-use-pd-concat-with-an-un-initiated-dataframe – Maksim