Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在大型数据集中查找包含部分信息的Python列表并将其组合到单个列表中_Python_Sql_List_Csv - Fatal编程技术网

如何在大型数据集中查找包含部分信息的Python列表并将其组合到单个列表中

如何在大型数据集中查找包含部分信息的Python列表并将其组合到单个列表中,python,sql,list,csv,Python,Sql,List,Csv,我正在从CSV文件中读取行,并创建一个列表列表,其中包含所有行。最后,我将列表发送到MySQL数据库。CSV文件中大约有150万行。整个过程大约需要一分半钟,这没有问题,列表的大小也没有问题。下面是从CSV文件中提取的示例,由于实际中有更多列,因此简化了该示例: ['AIDS mortality - Females', 'Rate', 'Females estimate', 'All countries', '03M49WLD', 1994, 0.110264] ['AIDS mortality

我正在从CSV文件中读取行,并创建一个列表列表,其中包含所有行。最后,我将列表发送到MySQL数据库。CSV文件中大约有150万行。整个过程大约需要一分半钟,这没有问题,列表的大小也没有问题。下面是从CSV文件中提取的示例,由于实际中有更多列,因此简化了该示例:

['AIDS mortality - Females', 'Rate', 'Females estimate', 'All countries', '03M49WLD', 1994, 0.110264]
['AIDS mortality - Females', 'Rate', 'Females upper estimate', 'All countries', '03M49WLD', 1994, 0.120264]
['HIV Incidence - males 15-24', 'Rate', 'Males (15-24)', 'upper estimate', 'Patigi', 'NGA_3_396', 2019, 0.00068]
['AIDS mortality - Females', 'Rate', 'Females lower estimate', 'All countries', '03M49WLD', 1994, 0.100264]
...
挑战在于,我需要将给定“指标”(第一个值)的估计值、上估计值和下估计值放入单个列表中,以便它们最终位于数据库中的同一行。在本例中,带有
艾滋病死亡率-女性
的三行。数据库表的每一行上都有估算/下/上列。这意味着我在数据库中的行数将只有原始CSV文件中的三分之一

使事情复杂化的是,我无法假设CSV文件中的三个对应行(estimate/upper/lower)位于何处。在这里,它们放在一起是为了说明,但实际上它们可以相隔一百万行

我已经尝试过暴力解决这个问题,所以对于从CSV文件读取的每一行,扫描所有列表,看看除了估计值/上限估计值/下限估计值之外,所有其他值是否相同。如果是,则合并,如果不是,则创建新列表。然而,这是非常低效的,而且花费的时间太长


我觉得这里有一个技巧,经验更丰富的开发人员会知道如何优化这个过程。

如果我正确理解了这个问题,您可能会想为每个“指标”构建一个字典,它将该指标的估计值映射到相应的值

rows = [
    ['AIDS mortality - Females', 'Rate', 'Females estimate', 'All countries', '03M49WLD', 1994, 0.110264],
    ['AIDS mortality - Females', 'Rate', 'Females upper estimate', 'All countries', '03M49WLD', 1994, 0.120264],
    ['HIV Incidence - males 15-24', 'Rate', 'Males (15-24)', 'upper estimate', 'Patigi', 'NGA_3_396', 2019, 0.00068],
    ['AIDS mortality - Females', 'Rate', 'Females lower estimate', 'All countries', '03M49WLD', 1994, 0.100264]
]

indicator = {}

for row in rows:
    if row[0] not in indicator:
        indicator[row[0]] = {}
    indicator[row[0]][row[2]] = row[-1]

for key, value in indicator.items():
    print(key, value)
输出:

AIDS mortality - Females {'Females estimate': 0.110264, 'Females upper estimate': 0.120264, 'Females lower estimate': 0.100264}
HIV Incidence - males 15-24 {'Males (15-24)': 0.00068}

编辑-刚刚注意到示例数据中的第三行有8列,而其他行有7列。您能详细说明一下吗?

您能提供这个示例的预期输出吗?它将澄清所需的输出将数据加载到一个包含相关列的表中,然后使用查询生成所需的结构。@GordonLinoff这是我尝试过的一种方法,但对于150万行,它只是永远运行。保罗用口述的回答可能是更理想的答案。@olesk。不应该。在数据库中做这项工作应该更快,但这需要正确设置数据。此外,我认为“HIV发病率-男性15-24”应该有“上限估计”:0.00068。如果你没有一个一致构造的数据集,那么编写一个程序来处理它将是一件非常痛苦的事情。通过字典可能真的可以做到这一点!我觉得自己没有想到这一点有点傻,但我被一个列表解决方案深深打动了。@PranavHosangadi对不起,我的错误,我试图制作一个简化的示例数据集,因为真实的数据集有更多的列。所有行的列数相同。