合并两个数据帧Pandas

时间:2015-07-27 15:00:41

标签: python csv pandas merge

仍然没有得到大熊猫的影响,我正在尝试使用合并在Pandas中加入两个数据帧。我已经在CSV中读入了两个数据框(在下面的代码中名为dropData和deosData)。两个数据框都有“Date_Time”列,这是一个解析的日期和时间信息列,用于为每个条目创建唯一的ID。 deosData文件是一整年的观察值,我试图与dropData中的相应条目匹配。

CSV文件:

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

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

我已经阅读了合并函数的文档,并在各种迭代中尝试了以下代码,到目前为止,我只能拥有一个带有正确标题行的空白数据框,或者将两个数据框合并在默认情况下分配的0 - (N-1)索引:

我的代码:

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)

在搜索SE和Doc之后我尝试重置索引,忽略索引列,将'Date_Time'列复制为单独的索引并尝试合并新列,我尝试使用'on = None' ,'left_on'和'right_on'作为'Date_Time'的排列无效。我检查了列数据类型,两者中的'Date_Time'都是dtype对象,我不知道这是否是错误的来源,因为我能找到的唯一问题就是围绕匹配不同的dtypes。

我要做的是将两个数据框合并到两个' Date_Time'列相交。例如:

    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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

在阅读parse_dates文件时,您需要csv,以便两个数据框中的Date_Time列都是pd.Timestamp个对象而不是原始字符串。 (如果你查看你的csv文件,一个是ISO格式YYYY-MM-DD HH:MM:SS而另一个是MM/DD/YYYY HH:MM)请尝试以下代码:

#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'])

然后进行合并。

答案 1 :(得分:0)

您可以使用join,但首先需要设置索引:

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)