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的数据框合并?