2015-07-27 8 views
0

Je ne tente toujours pas de joindre deux trames de données dans Pandas en utilisant la fusion. J'ai lu dans les CSV dans deux cadres de données (appelés dropData et deosData dans le code ci-dessous). Les deux blocs de données ont la colonne 'Date_Time', qui est une colonne analysée des informations de date et d'heure pour créer un ID unique pour chaque entrée. Le fichier deosData est la valeur d'une année entière d'observations que j'essaie de faire correspondre avec les entrées correspondantes dans dropData.Fusion de deux trames de données Pandas

fichiers CSV:

deosData: https://www.dropbox.com/s/3rr7hf7jzrmxdke/inputDeos.csv?dl=0

dropData: https://www.dropbox.com/s/z9mv4xccjzlsyif/inputDrop.csv?dl=0

Je suis passé par la documentation de la fonction de fusion et ont essayé le code suivant dans différentes itérations, jusqu'à présent je ne été capable d'avoir une trame de données vide avec une ligne d'en-tête correcte, ou avoir les deux trames de données fusionnées sur l'indexation 0 - (N-1) qui est assignée par défaut:

Mon code:

import pandas as pd 
import numpy as np 
import os 
from matplotlib import pyplot as plt 

#read in CSV to dataframe 
dropData=pd.read_csv("inputDrop.csv", header=0, index_col=None) 
deosData=pd.read_csv("inputDeos.csv", header=0, index_col=None) 

#merging dataframes into single sf 
merge=pd.merge(dropData,deosData, how='inner', on='Date_Time') 
#comment out during debugging 
#merge.to_csv('output.csv', sep=',', headers=True, index=False) 

#check merge dataframe creation 
print merge.head(1) 

Après une recherche sur SE et Doc, je l'ai essayé de réinitialiser l'index, en ignorant les colonnes d'index, copie la colonne « Date_Time » comme un index séparé et d'essayer de fusionner sur la nouvelle colonne, j'ai essayé d'utiliser ' on = None ',' left_on 'et' right_on 'comme permutations de' Date_Time 'en vain. J'ai vérifié les types de données de colonne, 'Date_Time' dans les deux sont dtype Objects, je ne sais pas si c'est la source de l'erreur, puisque les seuls problèmes que j'ai pu trouver se sont concentrés sur la correspondance des dtypes différents.

Ce que je cherche à faire est de faire fusionner les deux trames de données à l'intersection des deux colonnes 'Date_Time'. Par exemple:

Date_Time,Volume(Max),Volume(Sum),Volume(Min),Volume(Mean),Diameter(Count),Diameter(Max),Diameter(Sum),Diameter(Min),Diameter(Mean),Depth(Sum),Velocity(Max),Velocity(Sum),Velocity(Min),Velocity(Mean), Air Temperature (deg. C), Relative humidity (%), Wind Speed (m.s-1), Wind Direction (deg.), Wind Gust Speed (5) (m.s-1), Barometric Pressure (mbar), Gage Precipitation (5) (mm) 
9/1/2014 0:00,2.266188524,2.989272461,0.052464219,0.332141385,9,1.629668,5.972978,0.464467,0.663664222,0.003736591,2.288401,16.889656,1.495487,1.876628444,22.5,99,0,216.1,0.4,1016.2,0 

Toute aide serait grandement appréciée.

+0

Quelle est votre question? Ou émettre? – Kikohs

Répondre

0

Vous devez parse_dates fichier lors de la lecture csv, de sorte que dans les deux colonnes Date_Time dataframes sont pd.Timestamp objet au lieu de chaînes brutes. (Si vous regardez votre fichier csv, on est au format ISO YYYY-MM-DD HH:MM:SS alors que l'autre est dans MM/DD/YYYY HH:MM) Essayez les codes suivants:

#read in CSV to dataframe 
dropData = pd.read_csv("inputDrop.csv", header=0, index_col=None, parse_dates=['Date_Time']) 
deosData = pd.read_csv("inputDeos.csv", header=0, index_col=None, parse_dates=['Date_Time']) 

puis faites votre fusion.

+0

Merci, cela a fonctionné. Je me suis dit que depuis que j'ai analysé les données lorsque j'ai créé les fichiers CSV à partir de bases de données antérieures, je n'aurais pas besoin de le faire à nouveau. Merci encore! – zapmaster321

0

Vous pouvez utiliser join, mais vous devez d'abord définir l'index:

dropData=pd.read_csv('.../inputDrop.csv', header=0, index_col='Date_Time', parse_dates=True) 
deosData=pd.read_csv('.../inputDeos.csv', header=0, index_col='Date_Time', parse_dates=True) 
dropData.join(deosData)