【问题标题】:Merging two csv files and extracting out useful information using python合并两个csv文件并使用python提取有用信息
【发布时间】:2019-07-25 03:52:37
【问题描述】:

我有两个 .csv 文件,如下所示:

文件_1:

id  a b c
10  1 2 3
11  2 3 4

文件_2:

id   d e 
10   2 3
11   2 3
12   2 3

我的预期输出是:

id  a b c d e
10  1 2 3 2 3
11  2 3 4 2 3

我希望通过比较 id 号来合并这两个文件。如果 id 号匹配,则需要将 id 和对应的行合并提取。如果不匹配,则忽略相应 id 号的行。我的代码如下所示:

import pandas as pd
s1=pd.read_csv("file_1.csv")
s2=pd.read_csv("file_2.csv")
if s1['id']==s2['id']:
    merged=s1.merge(s2, on="id", how="outer")
else:
    pass
merged
merged.to_csv("output.csv")

运行此编码后,我无法获得预期的输出。任何人都可以帮助我吗?谢谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    由于您没有提到天气,您的 id 是索引名称或列名称,所以我将其作为索引。

    import pandas as pd
    s1=pd.DataFrame({'id':[10, 11], 'a':[1,2], 'b':[2,3], 'c':[3,4]})
    s2=pd.DataFrame({'id':[10, 11, 12], 'd':[2,2, 2], 'e':[3,3, 3]})
    merg = pd.merge(left=s1,right=s2,on='id').set_index('id')
    print merg
    

    这是您的输出--

        a  b  c  d  e
    id               
    10  1  2  3  2  3
    11  2  3  4  2  3
    

    【讨论】:

      【解决方案2】:

      尝试使用pd.DataFrame.merge

      print(file_1.merge(file_2, on='id'))
      

      输出:

         a  b  c  id  d  e
      0  1  2  3  10  2  3
      1  2  3  4  11  2  3
      

      如果您关心列的顺序,请执行以下操作:

      print(file_1.merge(file_2, on='id')[['id', 'a', 'b', 'c', 'd', 'e']])
      

      输出:

         id  a  b  c  d  e
      0  10  1  2  3  2  3
      1  11  2  3  4  2  3
      

      【讨论】:

        【解决方案3】:

        您没有正确合并数据框。试试这个:

        import pandas as pd
        s1=pd.read_csv("file_1.csv")
        s2=pd.read_csv("file_2.csv")
        
        merged=s1.merge(s2, on="id")
        # Set the index back to id
        merged = merged.set_index("id")
        merged.to_csv("output.csv")
        

        【讨论】:

          【解决方案4】:

          pandas.joinpandas.merge 应该在这里工作:

          import pandas as pd
          s1=pd.DataFrame({'id':[10, 11], 'a':[1,2], 'b':[2,3], 'c':[3,4]})
          s2=pd.DataFrame({'id':[10, 11, 12], 'd':[2,2, 2], 'e':[3,3, 3]})
          merged = s1.merge(s2, on='id', how='inner')
          # join works as well
          # merged = s1.join(s2.set_index('id'), on='id', how='inner')
          merged
          

          输出:

              id  a   b   c   d   e
          0   10  1   2   3   2   3
          1   11  2   3   4   2   3
          

          【讨论】:

            猜你喜欢
            • 2013-04-22
            • 2020-11-22
            • 2020-08-22
            • 1970-01-01
            • 1970-01-01
            • 2019-02-22
            • 2016-01-12
            • 2012-08-12
            • 2020-03-18
            相关资源
            最近更新 更多