for循环遍历查找数据与sqlite数据库查找数据性能问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了for循环遍历查找数据与sqlite数据库查找数据性能问题相关的知识,希望对你有一定的参考价值。
在sqlite数据库中有大量的数据,javascript数组ArrayInfo中也保存了同样多的数据,
用sql语句从sqlite数据库中查找然后获取到项目中用数组保存快
还是在ArrayInfo数组中用for循环遍历查找快?
我觉得你应该仔细考虑一下你的需求,为什么用遍历这种方式呢,耗费的时间不可预料,随着数据的增大,会变得很糟糕。建议你寻找其他方式,比如增加sql查询条件,限制返回的数据数量。追问
就是条件查询,根据条件是sql语句返回的快,还是数组筛选的快!
参考技术A 数据库查询快追问根据在哪里?
循环遍历Series以查找具有相同索引值的
【中文标题】循环遍历Series以查找具有相同索引值的【英文标题】:Loop through Series to find which have the same index value 【发布时间】:2021-10-04 03:46:24 【问题描述】:我想将我的 pandas 系列连接/合并在一起。这是我的数据结构(更多信息)
dictionary = 'a':'1','2','3','4', 'b':'1','2','3','4'
两个级别都有更多的值,每个数字对应一个包含时间序列数据的序列。我想将所有“a”合并到一个数据框中,唯一的问题是有些数据是每年,有些是季度,有些是每月。
所以我要做的是遍历我的数据,如下所示:
for level1 in dictData:
for level2 in dictData[level1]:
dictData[level1][level2].index.equals(dictData[level1][level2])
但显然在这里我只是将这个系列与它本身进行比较!我如何将每个元素与所有其他元素进行比较?我知道我错过了一些相当基本的东西。谢谢。
编辑:
以下是一些实际数据示例:
'noT10101': 'A191RL': Gross domestic product
1947-01-01 -1.1
1947-04-01 -1.0
1947-07-01 -0.8
1947-10-01 6.4
1948-01-01 4.1
... ...
2020-01-01 -5.0
2020-04-01 -31.4
2020-07-01 33.4
2020-10-01 4.3
2021-01-01 6.4
[370 rows x 1 columns], 'DGDSRL': Goods
1947-01-01 2.9
1947-04-01 7.4
1947-07-01 2.7
1947-10-01 1.5
1948-01-01 2.0
... ...
2020-01-01 0.1
2020-04-01 -10.8
2020-07-01 47.2
2020-10-01 -1.4
2021-01-01 26.6
[370 rows x 1 columns], 'A191RP': Gross domestic product, current dollars
1947-01-01 9.7
1947-04-01 4.7
1947-07-01 6.0
1947-10-01 17.3
1948-01-01 10.0
... ...
2020-01-01 -3.4
2020-04-01 -32.8
2020-07-01 38.3
2020-10-01 6.3
2021-01-01 11.0
[370 rows x 1 columns], 'DSERRL': Services
1947-01-01 0.4
1947-04-01 5.9
1947-07-01 -0.8
1947-10-01 -2.1
1948-01-01 2.7
... ...
2020-01-01 -9.8
2020-04-01 -41.8
2020-07-01 38.0
2020-10-01 4.3
2021-01-01 4.2
[370 rows x 1 columns],
如您所见,字典键 'not10101' 对应一系列键 'A191RL'、'DGDSRL'、'A191RP' 等,其关联值为一个 Series。因此,当我访问 .index 时,我正在查看该系列的索引,即日期时间值。在此示例中,它们都匹配,但在某些情况下它们不匹配。
【问题讨论】:
您好,欢迎来到 SO!我对你的例子有点困惑。例如,您正在遍历字典但尝试访问 index 属性。这些数字应该是您真实数据中的数据框,是吗? @HemersonTacon 感谢您的回答和评论,请检查我的编辑 我也更新了我的答案。我仍然建议使用相同的方法。如果我正确理解您的问题,它应该适用于您的数据。 【参考方案1】:您可以使用 pandas 的 concat
函数。应该是这样的:
import pandas as pd
import numpy as np
df1 = pd.Series(np.random.random_sample(size=5),
index=pd.Timestamp("2021-01-01") + np.arange(5) * pd.Timedelta(days=365),
dtype=float)
df2 = pd.Series(np.random.random_sample(size=12),
index=pd.Timestamp("2021-01-15") + np.arange(12) * pd.Timedelta(days=30),
dtype=float)
dictData= "a": "series": df, "same_series": df, "b": "series":df, "different_series": df2
new_dict =
for level1 in dictData:
new_dict[level1] = pd.concat(list(dictData[level1].values()))
请注意,我尝试模拟年度和每月粒度。我想说的是,串联的系列的粒度无关紧要。 结果将是这样的:
'a': 2021-01-01 0.213574
2022-01-01 0.263514
2023-01-01 0.627435
2024-01-01 0.388753
2024-12-31 0.990316
2021-01-01 0.213574
2022-01-01 0.263514
2023-01-01 0.627435
2024-01-01 0.388753
2024-12-31 0.990316
dtype: float64,
'b': 2021-01-01 0.213574
2022-01-01 0.263514
2023-01-01 0.627435
2024-01-01 0.388753
2024-12-31 0.990316
2021-05-01 0.614485
2021-05-31 0.611967
2021-06-30 0.820435
2021-07-30 0.839613
2021-08-29 0.507669
2021-09-28 0.471049
2021-10-28 0.550482
2021-11-27 0.723789
2021-12-27 0.209169
2022-01-26 0.664584
2022-02-25 0.901832
2022-03-27 0.946750
dtype: float64
查看文档:https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html
【讨论】:
我已按照您的建议进行操作,并在我的连接数据框中收到了许多 NaN 值和重复的日期条目。您的建议仍然很有帮助,因为我肯定离我的解决方案更近了一步,一旦我解决了这个问题,我会在今天晚些时候更新。以上是关于for循环遍历查找数据与sqlite数据库查找数据性能问题的主要内容,如果未能解决你的问题,请参考以下文章