【问题标题】:Matching data from two csv files based on two columns and creating a new csv file with selected columns基于两列匹配来自两个 csv 文件的数据并创建一个包含选定列的新 csv 文件
【发布时间】:2013-06-24 15:30:35
【问题描述】:

我有两个 csv 文件。

一个.csv:

1, 12.1455675, -13.1287564, 23, 9, 4.5, 4
2, 12.5934593, -13.0856385, 14, 5, 9.7, 6
3, 12.0496204, -13.8938582, 14, 6, 3.4, 9
4, 12.1456084, -12.1939589, 45, 2, 3.4, 8

两个.csv:

9, 12.0496, -13.8939, .3, 55
3, 12.1456, -13.1288, 3.4, 9

我想要做的是根据第一列和第二列匹配两个 csv 文件。我想要另一个具有匹配列 1 和 2 的 csv 文件,但还包括来自 two.csv 的相应第 3 列值和来自 one.csv 的第 6 列值。像这样:

12.0496, -13.8939, 55, 3.4
12.1456, -12.1288, 9, 4.5

我不确定如何处理这个问题,尤其是当 two.csv 中的某些值被四舍五入时。

非常感谢任何帮助!

【问题讨论】:

  • 有谁知道不使用 SQL 的方法?

标签: python csv python-2.7


【解决方案1】:

您可以使用pandas' io 来读取/写入 csv 文件,并使用database-style joining/merging capabilities 来合并文件:

import pandas as pd

normalize = lambda x: "%.4f" % float(x) # round
df = pd.read_csv("one.csv", index_col=(0,1), usecols=(1, 2, 5),
                 header=None, converters=dict.fromkeys([1,2], normalize))
df2 = pd.read_csv("two.csv", index_col=(0,1), usecols=(1, 2, 4),
                  header=None, converters=dict.fromkeys([1,2], normalize))
result = df.join(df2, how='inner')
result.to_csv("output.csv", header=None) # write as csv

结果

12.0496,-13.8939,3.4,55
12.1456,-13.1288,4.5,9

【讨论】:

    【解决方案2】:

    这是关于 SO 的一个很常见的问题。

    就我自己而言,同样的答案:对于中期解决方案,导入数据库,然后使用 JOIN 执行查询...


    尝试搜索: https://stackoverflow.com/search?q=combining+csv+python

    【讨论】:

    • 我无法根据两列找到任何匹配项并处理舍入问题。
    • 我的回答仍然是有效的想法。这不是(仅)一个玩笑:在两列上执行join。此外,您甚至可以在 SQL 级别进行一些计算...
    • 你能给我举个例子吗?我不熟悉加入python。
    • 我不是在讨论“Python 中的联接”,而是使用 Python 来执行 SQL 联接:这是一个示例:zetcode.com/db/sqlite/joins 你会发现很多互联网上的资源。附带说明一下,标准 Python 发行版嵌入了 Sqlite3,因此您无需安装额外的库。
    • 谢谢。抱歉,我根本不熟悉 SQL。我需要将我的 csv 文件转换为表吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 2015-12-22
    • 2021-08-07
    • 2013-10-28
    • 2016-08-12
    相关资源
    最近更新 更多