2017-09-27 3 views
-2

J'ai beaucoup de jeux de données dans les fichiers CSV, ils ressemblent à l'image que j'ai joint.combiner les fichiers CSV, les trier par le temps et la moyenne des colonnes

Dans la première colonne est toujours l'heure en minutes, mais les pas de temps et le nombre total de lignes diffèrent entre les fichiers de données brutes. Je voudrais avoir un fichier de sortie (fichier csv) dans lequel tous les fichiers bruts sont combinés et triés par le temps. Alors que le temps augmente du haut vers le bas de la colonne.

raw data and output

La colonne de concentration devrait être en moyenne, lorsque plus d'un numéro existe.

J'ai essayé comme ceci:

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

d1 = pd.read_csv('dat1.txt', sep="\t") 
d2 = pd.read_csv('dat2.txt', sep="\t") 

d1.columns 
d2.columns 

merged_outer = pd.merge(d1,d2, on='time', how='outer') 
print merged_outer 

mais il ne conduit pas à la sortie correcte. Je suis débutant en Pandas mais j'espère avoir bien expliqué le problème. Merci pour toute idée ou suggestion!


Nous vous remercions de votre idée. Malheureusement, quand je l'exécute, je reçois un message d'erreur disant que dat1.txt n'existe pas. Cela me semble étrange que je lis les fichiers bruts: initialement

d1 = pd.read_csv('dat1.txt', sep="\t") 
d2 = pd.read_csv('dat2.txt', sep="\t") 

Désolé, ici les données sous forme de texte brut:

raw data 1 
time column2 column3 concentration 
1 2 4 3 
2 2 4 6 
4 2 4 2 
7 2 4 5 


raw data 2 
time column2 column3 concentration 
1 2 4 6 
2 2 4 2 
8 2 4 9 
10 2 4 5 
12 2 4 7 
+1

la prochaine fois que vous posez une question, collez des extraits du texte brut du fichier 'csv', au lieu de captures d'écran, puis d'autres personnes pourront tester plus facilement leur code –

Répondre

1

Quelque chose comme cela pourrait fonctionner

filenames = ['dat1.txt', 'dat2.txt',...] 
dataframes = {filename: pd.read_csv(filename, sep="\t") for filename in filenames} 

merged_outer = pd.concat(dataframes).groupby('time').mean() 

Lorsque vous transmettez un dict à pd.concat, il crée un DataFrame MultiIndex avec les touches dict comme niveau 0