【问题标题】:Create a new dataset after selection in Python在 Python 中选择后创建一个新数据集
【发布时间】:2022-01-19 16:53:12
【问题描述】:

完全是 Python 新手,我正在尝试“在现场”学习。 所以基本上我设法打开了一个 csv 文件,只选择特定列中具有特定值的行,然后打印这些行。

在此之后我想做的基本上是随机选择其中一个找到的行。 我想通过首先创建一个新的 csv 文件来做到这一点,此时该文件将只包含过滤后的行,然后从中随机选择。

对最简单的方法有什么想法吗?

这是目前为止的部分代码:

import csv
    with open("top2018.csv") as f:
        reader = csv.reader(f)
        for row in reader:
            if (row[4] >= "0.8") and (row[6] <= "-4") and (row[12] >= "0.8"):
                print(row[2] + " -", row[1])

它会找到 2 行(我检查过)。

然后,创建一个新的 csv 文件:

import pandas as pd
            artist = [row[2]]
            name = [row[1]]
            dict = {'artist': artist, 'name': name}
            df = pd.DataFrame(dict)
            df.to_csv('test.csv')

但我不知道为什么使用这种方法,新的 csv 文件只有 1 个条目,而我希望在其中包含所有找到的行。

希望我写的东西有意义! 谢谢大家!

【问题讨论】:

    标签: python csv random selection new-operator


    【解决方案1】:

    您正在混合列和行,也许您应该将变量 row 重命名为 record 以便您更好地了解正在发生的事情。不幸的是,我不得不猜测数据文件的样子......

    dict 变量(尽量不要使用这个名字,这实际上是一个内置函数,你不想覆盖它)正在创建两列,“艺术家”和“名字”,看起来具有[1.2] 之类的值。因此,dict(尝试打印)可能看起来像 {"artist":[2.0], "name":[3.1]},它是单行、两列实体。

    artist     name
    2.0        3.1
    

    尝试进入 pandas,使用 df = pd.read_csv()df[df.something &gt; 0.3] 样式符号来过滤表,使用 csv 包更适合真正棘手的数据处理。

    【讨论】:

    • 谢谢!我会尽快尝试?
    • 所以我试过了,但我不确定这是否适用,因此我附上了新文件的创建结果,希望它对我的解释有所帮助。 @ 987654321@ 基本上,它现在只显示一个条目,而它们是两个,所以它应该有这两个......我需要它根据条件拥有所有具有正确值的条目。
    • 在您的 pandas 代码 sn-p 中,您只需为艺术家和名称分配一个值,因此您只能得到一行。尝试重命名变量,行似乎真的是列。在您的第一个代码片段中,您将需要一种追加形式来创建一个列表(例如,artist.append(row...) 和 name.append(row...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2021-04-18
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多