【问题标题】:how to write a python script that merges columns in two csv files based on a specific key如何编写一个基于特定键合并两个csv文件中的列的python脚本
【发布时间】:2016-03-22 01:45:26
【问题描述】:

我想编写一个 python 脚本,它根据特定键合并两个 csv 文件的分数。

file1.csv

    id, uid, score1, score2
    1,abc,3,5
    2,def,2,4

file2.csv

    id, uid, score3
    1,def,5
    2,abc,4

给定键“uid”的所需连接文件示例:

    uid, score1, score2, score3
    abc, 3, 5, 4
    def, 2, 4, 5

我的代码看起来应该可以工作,但由于某种原因我不断收到

    KeyError: 'uid'

当我尝试运行它时:

    import pandas as pd

    csv1 = pd.read_csv('file1.csv')
    csv2 = pd.read_csv('file2.csv')
    csv1.drop(csv1.columns[[0]], axis=1, inplace=True)
    csv2.drop(csv2.columns[[0]], axis=1, inplace=True)

    merged = pd.merge(csv1, csv2, on='uid')
    print merged

我什至尝试替换

    merged = pd.merge(csv1, csv2, on='uid')

    merged = csv1.merge(csv2, on='uid')

我也遇到了同样的错误。

我认为 drop 可能会以某种方式修改索引,因此合并无法读取“uid”,但我不知道如何修复它。

【问题讨论】:

  • .drop 后 csv1 和 csv2 是什么样子的?

标签: python csv pandas merge keyerror


【解决方案1】:

因为 pandas 的 read_csv 方法不会为您去除第一行中的空格。您可以通过打印 csv1.keys() 查看 csv 数据帧中的所有键,如下所示:

Index([u'id', u' uid', u' score1', u' score2'], dtype='object')

因此,您必须使用“uid”作为合并键或更改 file1.csv 或 file2.csv 中的第一行。

附:你可以看看this question 来省点手工的脱衣工作

【讨论】:

    【解决方案2】:

    您可以尝试一下,而不是在两者中都删除“id”列吗

    merged = pd.merge(csv1,csv2, on=['id','uid'])
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 2013-07-01
      • 2013-03-28
      • 2019-03-27
      相关资源
      最近更新 更多