【问题标题】:appending non-unique rows to another database using python使用python将非唯一行附加到另一个数据库
【发布时间】:2011-06-29 05:19:32
【问题描述】:

大家好, 我有两个数据库。一个有 145000 行和大约。 12 列。我有另一个大约 40000 行和 5 列的数据库。我正在尝试根据两列值进行比较。例如,如果在 CSV#1 中,第 1 列表示 100-199,第 2 列表示 Main St(意味着该行包含在主要街道的 100 街区内),我将如何将其与 CSV# 中类似的两列进行比较2.我需要将 CSV#1 中的每一行与 CSV#2 中的每一行进行比较。如果有匹配项,我需要将每个匹配行的 5 列附加到 CSV#2 行的末尾。因此 CSV#2 的列数将显着增长并具有重复条目,与列的排序方式无关。关于如何将两列与单独数据库中的另外两列进行比较然后遍历所有行的任何建议。到目前为止,我一直在使用 python 和 import csv 来完成其余的工作,但这部分问题让我很困惑。

提前致谢 -约翰

【问题讨论】:

  • 对不起,我的意思是:如果有匹配项,我需要将每个匹配行的####12#### 列附加到 CSV#2 行的末尾跨度>
  • 不要评论你自己的问题。这是你的问题。请更新您的问题并删除评论。另外,请考虑使用段落将大块文本分成单独的部分,以便我们阅读。
  • 您是否考虑过使用数据库而不是 CSV 文件?这将使这变得非常容易。

标签: python csv append


【解决方案1】:
  1. csv 文件不是数据库。 csv 文件只是文本块的行;一个适当的数据库(如PostgreSQLMysqlSQL ServerSQLite 或许多其他数据库)为您提供适当的数据类型和表连接和索引以及行迭代以及正确处理多个匹配项以及您真的不想从头重写。

  2. 它应该如何知道 Address("100-199")==Address("Main Street")?您将不得不提出某种知识库,将每一位文本转换为规范地址或地址范围,然后您可以进行比较;请参阅Where is a good Address Parser,但请注意它处理的是单数地址(不是地址范围)。

编辑:

感谢斯文;如果您使用的是真实数据库,则可以执行类似的操作

SELECT
    User.firstname, User.lastname, User.account, Order.placed, Order.fulfilled
FROM
    User
    INNER JOIN Order ON
        User.streetnumber=Order.streetnumber
        AND User.streetname=Order.streetname

if streetnumber 和 streetname 是 exact 匹配;否则你仍然需要考虑上面的第 2 点。

【讨论】:

  • 关于 2,OP 希望使用两列作为连接的键。另一个“数据库”也将包含具有完全相同的两个值的行。
  • 好的,谢谢我以前没有使用过 SQL,但我正在阅读如何将 csv 导入其中,然后我将使用这种查询。我还决定创建一个新列,其中包含“100-199 Main Street”,这应该会进一步简化它。
猜你喜欢
  • 2011-06-19
  • 2019-01-28
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 2016-01-16
相关资源
最近更新 更多