加入CSV或表格

时间:2016-06-15 19:06:56

标签: python sql oracle csv pandas

我有两个不同列的csv fies。 表1

title   stage   jan      time
darn    3.001   0.421   5/23/2016 13:14
darn    2.054   0.1213  5/24/2016 14:14
ok      2.829   1.036   5/23/2016 14:14
five    1.115   1.146   5/23/2016 17:14
three      2       5    5/23/2016 21:14

表2

title   mar      apr     may    jun      date
darn    0.631   1.321   0.951   1.751   5/23/2016 12:14
ok      1.001   0.247   2.456   0.3216  5/24/2016 18:41
three   0.285   1.283   0.924   956     5/25/2016 17:41

我需要按标题(主键)过滤它们,并且表2中的日期字段中的时间等于表1中日期字段中的(时间 - 1小时)的条件。因此输出应该类似于这样:

title   stage   jan     mar     apr     may    jun     date
 darn   3.001   0.421   0.631  1.321   0.951  1.751  5/23/2016 13:14

我想知道是否可以使用Pandas或SQL查询来完成是最好的前进方式。我抬起头,看到大熊猫可以根据唯一的键值合并。     将pandas导入为pd

a = pd.read_csv("1.csv")
b = pd.read_csv("2.csv")
merged = a.merge(b, on='title')
merged.to_csv("output.csv", index=False)

这是该计划。我正在努力设置如何设置日期字段的条件。欢迎使用SQL和Pandas解决方案

2 个答案:

答案 0 :(得分:1)

假设您的时间和日期变量被Pandas认可, 只需添加

merged = merged[merged.date == (merged.time - pd.Timedelta('1 hours'))]

答案 1 :(得分:0)

我会创建一个虚拟列(以匹配"时间"在df中):

In [11]: df1["time"] = df1["date"] + pd.offsets.Hour(1)

现在你可以干净地合并:

In [12]: df.merge(df1)
Out[12]:
  title  stage    jan                time    mar    apr    may    jun                date
0  darn  3.001  0.421 2016-05-23 13:14:00  0.631  1.321  0.951  1.751 2016-05-23 12:14:00

In [13]: df.merge(df1, on=["title", "time"])  # potentially less reckless to specify columns
Out[13]:
  title  stage    jan                time    mar    apr    may    jun                date
0  darn  3.001  0.421 2016-05-23 13:14:00  0.631  1.321  0.951  1.751 2016-05-23 12:14:00

注意:这意味着您不必进行完全合并(仅限标题),这可能会造成空间效率低下。