在不同列中的两个单独的excel文件中找到不同的行,并将其合并

时间:2019-10-16 12:32:23

标签: python excel python-3.x pandas

我对此完全陌生,因此没有任何代码可提供。

我需要python 3.x的帮助,最好是pandas软件包。

我有两个单独的Excel文件。在第一个excel文件中,我想按行中的值查找行,该值看起来像K232999。它们位于第二列。

然后,我想使用与这些名称相关联的时间值,该值在第一列中,格式为dd/mm/yyyy hh:mm,并用它在第二个excel文件中查找行并将其提取。第二个文件中的时间值也位于第一列中,并且具有相同的格式。

最重要的是时间间隔也很重要:

我需要1.9.2019. 12:55 - 2.9.2019. 10:35的{​​{1}}和2.9.2019. 09:46 - 3.9.2019. 02:51之间的间隔,然后在不同的excel文件中找到相同的间隔并将其合并到单独的excel或内存中的某个位置,以便我可以使用它们,或者最好同时选择两者。例如:

Excel 1:

K324645

Excel 2:

1.9.2019. 12:55 K324645
1.9.2019. 17:55 K324645
2.9.2019. 02:51 K324645
2.9.2019. 10:35 K324645

2.9.2019. 12:55 FGJFJKH
2.9.2019. 17:12 SAFFAFA
2.9.2019. 19:15 SGDFGDS

3.9.2019. 11:46 K324645
3.9.2019. 17:55 K324645
3.9.2019. 20:51 K324645

3.9.2019. 05:32 FDSJFJKH
3.9.2019. 10:12 SAFFAFA
3.9.2019. 17:12 SGDFGDS

最终结果:

1.9.2019. 12:57 345,7
1.9.2019. 17:50 218,3
2.9.2019. 02:53 323,4
2.9.2019. 10:29 125,5

2.9.2019. 13:00 215,8
2.9.2019. 17:09 232,7
3.9.2019. 09:53 188.7
3.9.2019. 10:45 656.5

3.9.2019. 12:26 355,2
3.9.2019. 17:45 656.5
3.9.2019. 20:49 268.4

请注意,表中的日期不同。我必须在first的时间范围内从seconde提取值。

2 个答案:

答案 0 :(得分:0)

首次使用:

import pandas as pd

df1=pd.read_excel(file1)
df2=pd.read_excel(file2)

pd.to_datetime(df1['Time_Column_name'].str.strip(),format='%H:%M:%S')
pd.to_datetime(df2['Time_Column_name'].str.strip(),format='%H:%M:%S')

然后使用以下方法合并2个数据框:

pd.merge(df1,df2,how=inner)

答案 1 :(得分:0)

您说您是一个全新的人,所以我不确定您对此已经走了多远。如果已将两个文件都导入到数据框中,则需要将两个数据框中的DateTime列重命名为相同的名称。然后使用内部合并。

df3 = pd.merge(df1, df2, on='DateTime', how='inner') # merge the dataframes
df3['DateTime'] = pd.to_datetime(df3['DateTime']) # convert column to date/time format  

在这一点上,我将数据帧分为两个。时间在1/9/2019 12:55和2/9/2019 10:35之间的时间。另一个时间为2/9/2019 09:46和3/9/2019 02:51之间。然后将这两个合并在一起。

firstset = df3[(df3['DateTime'].astype(str) >= '2019-01-09 12:55:00') & (df3['DateTime'].astype(str) < '2019-02-09 10:35:01')]
secondset = df3[(df3['DateTime'].astype(str) >= '2019-02-09 09:46:00') & (df3['DateTime'].astype(str) < '2019-03-09 02:51:01')]  
final = pd.concat([firstset, secondset]).drop_duplicates()

这应该完成您想要的。不过,这可能不是最快的方法。