当前位置: 首页 > 知识库问答 >
问题:

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

冯枫
2023-03-14

我有两个csv文件,我想读入熊猫的数据帧。我想合并它们,但显示时间不能重复。

如果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

共有3个答案

邴俊民
2023-03-14

我建议你搜索一下其他的问题,你会发现更有效的方法,比如这里。它概述了在处理大型数据集时使用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
楚和悌
2023-03-14

您希望conconat()而不是合并。

第一件事是加载每个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)

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

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

然后另存为csv

final_df.to_csv('final.csv')
祝花蜂
2023-03-14
  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')
 类似资料:
  • 问题内容: 我肯定在这里错过了一些简单的事情。尝试在熊猫中合并具有相同列名的两个数据框,但右侧的数据框具有一些左侧没有的列,反之亦然。 我试着加入外部联接: 但这产生了: 我还指定了一个要连接的单列(例如on =“ id”),但是它复制了除“ id”以外的所有列,例如attr_1_x,attr_1_y,这并不理想。我也将整个列列表(有很多)传递给了“ on”: 产生: 我想念什么?我想获得一个带有

  • 我肯定错过了一些简单的东西。尝试合并熊猫中的两个数据帧,它们的列名基本相同,但右边的数据帧有一些左边没有的列,反之亦然。 我已尝试使用外部联接进行联接: 但这会产生: 我还指定了一个要连接的列(例如,on="id"),但这会重复所有列,除了"id",如attr_1_x、attr_1_y,这并不理想。我还传递了整个列列表(有很多)到on: 其产生: 我错过了什么?我想得到一个附加了所有行的df,并且

  • 我有两个不同的DataFrames,我想合并与和列。我看到有一些线程,但我找不到我的问题的解决方案。我也读了这份文件,并尝试了不同的组合,但是,不工作得很好。 我的两个不同数据帧的示例, 正如您在两个数据帧中看到的,以开始,我想加入,这基本上是匹配的日期和时间。到目前为止,我使用前面的线程和上面提到的文档尝试了许多不同的组合。例如,, 这是右DataFrame的值。我知道,我不必同时使用和列,但是

  • 问题内容: 我有两个表(表A和表B)。 它们具有不同的列数-假设表A具有更多列。 如何合并这两个表,并为表B没有的列获取空值? 问题答案: 为具有较少列的表添加额外的列作为null

  • 问题内容: 我有两个数据框需要根据日期值是否适合其他两个日期之间进行合并。基本上,我需要在和之间执行外部联接。似乎合并和连接总是假定有一个公共列,在这种情况下,我没有。 问题答案: 创建日期时间的数据和格式: 创建键进行交叉连接: 筛选出在开始日期和结束日期之间不符合事件日期条件的记录: 加入原始日期范围表并放下关键列 输出:

  • 我有DateTime字符串2020-04-03 01:29:27和2020-04-03 01:29:37我想得到持续时间在小时。我已经尝试了很多东西,但这却找不到任何帮助