【问题标题】:Python merge two dataframes with distinct datetime [duplicate]Python合并两个具有不同日期时间的数据框[重复]
【发布时间】: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

【问题讨论】:

    标签: python pandas datetime dataframe


    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-23
          • 1970-01-01
          • 1970-01-01
          • 2020-07-07
          • 1970-01-01
          • 2020-06-25
          • 2020-11-05
          • 2018-01-22
          相关资源
          最近更新 更多