La fusion de données de série chronologique par date à l'aide de numpy/pandas

J'ai le temps de la série de données à partir de trois différentes capteur de sources comme les fichiers CSV et souhaitez les combiner en un seul gros fichier CSV.
J'ai réussi à lire dans numpy utilisation de numpy est genfromtxt, mais je ne suis pas sûr de quoi faire à partir d'ici.

Fondamentalement, ce que j'ai, c'est quelque chose comme ceci:

Tableau 1:

timestamp    val_a   val_b   val_c

Tableau 2:

timestamp    val_d   val_e   val_f   val_g

Tableau 3:

timestamp    val_h   val_i

Tous les timestamps UNIX sont milliseconde horodateurs comme numpy.uint64.

Et ce que je veux est:

timestamp    val_a   val_b   val_c   val_d   val_e   val_f   val_g   val_h   val_i

...où toutes les données sont combinées et commandés par les horodateurs. Chacun des trois tableaux est déjà commandé par horodateur.
Puisque les données proviennent de différentes sources, il n'y a pas de garantie qu'un timestamp à partir de la table 1 sera également dans le tableau 2 ou 3, et vice-versa. Dans ce cas, les valeurs vides doivent être marqués comme N/A.

Jusqu'à présent, j'ai essayé d'utiliser les pandas pour convertir les données comme suit:

df_sensor1 = pd.DataFrame(numpy_arr_sens1)
df_sensor2 = pd.DataFrame(numpy_arr_sens2)
df_sensor3 = pd.DataFrame(numpy_arr_sens3)

et ensuite essayé d'utiliser des pandas.DataFrame.de fusion, mais je suis sûr que cela ne fonctionnera pas pour ce que je suis en train de le faire maintenant. Quelqu'un peut me pointer dans la bonne direction?

Pouvez-vous montrer ce que vous avez essayé avec merge, par exemple, il devrait fonctionner si vous n'avez merged = pd.merge(df_sensor1, df_sensor_2, on='timestamp') et puis répétez l'opération pour df_seonsor3, ou si vous définissez l'indice d'horodatage pour tous les dfs ensuite, vous pouvez simplement faire pd.concat([df_sensor_1, df_seonsor2, df_sensor3])
Merci pour la réponse rapide! J'ai utilisé merge exactement comme vous l'avez écrit, mais qui apparemment n'est une jointure interne, de sorte que seuls les points de données qui ont des horodateurs dans toutes les tables sont écrits à la table fusionnée. J'ai essayé une jointure externe, qui ne comprennent toutes les données, mais aussi ne pas obtenir le droit de la commande. Je n'ai juste essayer concat. Je n'ai merged = pd.concat([df_sensor1, df_sensor2, df_sensor3], axis=1) et merged.to_csv('out.csv', sep=';', header=True, index=True, na_rep='N/A') et qui semble avoir fait le travail. Je vais vérifier ça demain.

OriginalL'auteur vind | 2015-08-25