【问题标题】:Python, filter csv for unique values in column1 and returnPython,过滤csv以获取column1中的唯一值并返回
【发布时间】:2021-02-22 00:54:29
【问题描述】:

使用 python (2.6.9) 我已将 Oracle DB 中的数据提取到 .CSV 文件中(以避免元组)。

在 .CSV 中,我有两列没有标题的数据。

第 1 列包含产品编号。 第 2 列包含产品存储的位置。

.CSV 中的示例 sn-p:

60139420    1011011990042
60139420    1013071990182
60139421    1009041990122
60139421    1007091990161
60144228    1014101990542
60160281    1003091990212
60181944    1006021990541

我想要实现的是通过第 1 列进行过滤以找到所有唯一值(产品编号仅出现一次),并返回这些值,但也有从第 2 列返回的相应位置。

所以从上面的例子中,我希望输出是:

60144228    1014101990542
60160281    1003091990212
60181944    1006021990541

因为这三种产品都是独一无二的。

这些值可以附加到另一个变量/数组。

披露,我对 Python 还是很陌生。我检查了 stackoverflow 和其他在线资源以获取示例/帮助,但要么无法理解我找到的内容,要么无法找到我需要的内容。

这让我想到了我的第一个问题。

这是我目前的代码。

import cx_Oracle
import csv

conn = cx_Oracle.connect("some db credentials")

c = conn.cursor()
sql = ('''some sql query''')
c.execute(sql)

results = c.fetchall()

with open("test_file.csv", "w") as file:
    for row in results:
        csv.writer(file).writerow(row)

c.close()
conn.close()

如果有一种方法可以使用我的代码来实现这一目标,或者有更好的整体实现方式,我们将不胜感激。

提前谢谢你!

【问题讨论】:

    标签: python csv sorting python-2.x


    【解决方案1】:

    Pandas 有一个用于数据帧的 drop_duplicates 函数,该函数采用 keep=False 参数。因此,您应该能够执行df = df.drop_duplicates(keep=False) 之类的操作来获得您要查找的内容。

    没有 pandas,你可以这样做:

    import csv
    
    counts = {}
    
    with open('output.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile, delimiter='\t')
        for row in results:
            prod_num = row[0]
            counts[prod_num] = counts.setdefault(prod_num, 0) + 1
        for row in results:
            prod_num = row[0]
            if counts[prod_num] == 1:
                writer.writerow(row)
    

    我将检查结果两次:第一次计算每个产品编号的出现次数,第二次只输出产品编号恰好出现一次的行。

    【讨论】:

    • 干杯,我会检查熊猫文档。
    • 酷,如有其他问题请告诉我!如果它对您有用,如果您接受答案,我将不胜感激:)
    • 客户端有一个封闭的服务器,所以当我回到轮班时,我会为 pandas 等找到一个解决方法。我只是好奇...你知道不使用 Pandas 也能获得相同结果的方法吗?
    • @theBerry 啊,明白了。我刚刚更新了我的答案,用一种在没有熊猫的情况下实现相同结果的方法。
    • 我刚刚尝试了“没有熊猫”的答案,效果很好!我必须通读代码才能完全理解每一步,我得到了大致的画面。感谢您的帮助! :)
    猜你喜欢
    • 1970-01-01
    • 2013-06-22
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2016-09-05
    • 2020-08-28
    • 1970-01-01
    相关资源
    最近更新 更多