Python合并两个具有不同日期时间的数据框[重复]

Posted

技术标签:

【中文标题】Python合并两个具有不同日期时间的数据框[重复]【英文标题】:Python merge two dataframes with distinct datetime [duplicate] 【发布时间】:2018-09-10 16:40:43 【问题描述】:

我有两个 csv 文件,我想用 pandas 将它们作为数据帧读入。我想合并它们,但显示时间不能重复。

如果 ShowingDateTime 是重复的,我想从第一个数据帧而不是第二个数据帧中选择行。我不确定用熊猫做到这一点的最佳方法。我想根据 ShowingDateTime 之后的升序排序。

CSV1:

Address,City,State,ShowingDateTime
1234 Hodge Street,Brown,CA,1/4/17 12:00
9613 Llama Street,Downtown,CA,1/5/17 12:15
7836 Bob Street,Swamp,CA,1/5/17 12:30
2134 Cardinal Street,Ruler,CA,1/6/17 11:30

CSV2:

Address,City,State,ShowingDateTime
10234 Peek Street,Brown,CA,1/4/17 12:00
1122 Kara Street,Downtown,CA,1/5/17 12:30
1023 Solr Street,Swamp,CA,1/6/17 11:30
2234 Tempura Street,Ruler,CA,1/6/17 12:00

预期的合并结果(df 合并后写入 csv):

1234 Hodge Street,Brown,CA,1/4/17 12:00
9613 Llama Street,Downtown,CA,1/5/17 12:15
7836 Bob Street,Swamp,CA,1/5/17 12:30
2134 Cardinal Street,Ruler,CA,1/6/17 11:30
2234 Tempura Street,Ruler,CA,1/6/17 12:00

【问题讨论】:

【参考方案1】:
  import pandas as pd
  df1 = pd.read_csv('path_of_first_csv_file')
  df2 = pd.read_csv('path_of_second_csv_file')
  df3 = pd.concat([df1, df2], ignore_index=True)
  df3 = df3.drop_duplicates(subset='ShowingDateTime', keep="first")
  print(df3)
  df3.to_csv('output.csv')

【讨论】:

【参考方案2】:

你想要concat() 而不是合并。

首先要加载每个 csv。

df1 = pd.read_csv('csv1.csv')
df2 = pd.read_csv('csv2.csv')

然后连接两个dfs。

final_df = pd.concat([df1,df2],how='outer', ignore_index=True)

然后删除重复的ShowingDateTime 在这些情况下保留 df1 行

final_df.drop_duplicates(subset=['ShowingDateTime'], keep='first')

然后保存为csv

final_df.to_csv('final.csv')

【讨论】:

【参考方案3】:

我建议您搜索一下其他问题,您会找到更有效的方法,例如here。它概述了使用df.index.duplicated(keep='first') 在处理大型数据集时如何提高性能效率,在您的情况下,可以按如下方式完成:

directory = './records/'
all_files = [f for f in os.listdir(directory)]
df = pd.concat((pd.read_csv(directory+f, index_col=3) for f in all_files)) #specify ShowingDateTime as index column
df = df[~df.index.duplicated(keep='first')] #keep only the first index

【讨论】:

以上是关于Python合并两个具有不同日期时间的数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章

两个数据框,计算重复的ID并与另一个具有相同ID的数据框合并?

将具有两个日期列的一个数据框与另一个具有两个日期列的数据框合并

在 R 中合并两个数据帧,没有重复的条目

根据日期时间索引合并两个数据框(不同大小)

合并一个值在另外两个之间的熊猫数据框[重复]

Python Pandas - 连接两个具有不同行数和列数的数据框