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数据库查找数据性能问题的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法---查找算法(Search Algorithm)

数据结构与算法 - 数组

python基本数据类型之字符串

循环遍历Series以查找具有相同索引值的

Python列表list操作-遍历查找增加删除修改排序

以日期时间格式查找两列数据之间的单个时间跨度,可能使用 for 循环