小编Mik*_*ike的帖子

从 Python Pandas / Dask 中的 Parquet 文件读取一组行?

我有一个与此类似的 Pandas 数据框:

datetime                 data1  data2
2021-01-23 00:00:31.140     a1     a2
2021-01-23 00:00:31.140     b1     b2       
2021-01-23 00:00:31.140     c1     c2
2021-01-23 00:01:29.021     d1     d2
2021-01-23 00:02:10.540     e1     e2
2021-01-23 00:02:10.540     f1     f2
Run Code Online (Sandbox Code Playgroud)

真实的数据帧非常大,对于每个唯一的时间戳,都有几千行。

我想将此数据帧保存到 Parquet 文件中,以便我可以快速读取具有特定日期时间索引的所有行,而无需加载整个文件或遍历它。如何在 Python 中正确保存它,以及如何快速仅读取一个特定日期时间的行?

阅读后,我想要一个新的数据框,其中包含该特定日期时间的所有行。例如,我只想从 Parquet 文件中读取 datetime "2021-01-23 00:00:31.140" 的行并接收此数据帧:

datetime                 data1  data2
2021-01-23 00:00:31.140     a1     a2
2021-01-23 00:00:31.140     b1     b2        
2021-01-23 00:00:31.140     c1     c2
Run Code Online (Sandbox Code Playgroud)

我想知道它可能首先需要将每个时间戳的数据转换为一列,像这样,以便可以通过读取列而不是行来访问它?

2021-01-23 00:00:31.140  2021-01-23 00:01:29.021  2021-01-23 00:02:10.540
           ['a1', 'a2']             ['d1', 'd2']             ['e1', 'e2']
           ['b1', 'b2']                      NaN             ['f1', 'f2']
           ['c1', 'c2']                      NaN                      NaN …
Run Code Online (Sandbox Code Playgroud)

python pandas parquet dask dask-dataframe

5
推荐指数
1
解决办法
454
查看次数

Python tqdm process_map:追加进程之间共享的列表?

我想共享一个列表来附加并行线程的输出,从process_mapfrom开始tqdm。(我想使用的原因process_map是很好的进度指示器和max_workers=选项。)

我尝试使用它from multiprocessing import Manager来创建共享列表,但我在这里做错了:我的代码打印一个空的shared_list,但它应该打印一个包含 20 个数字的列表,正确的顺序并不重要。

任何帮助将不胜感激,提前谢谢!

import time
from tqdm.contrib.concurrent import process_map
from multiprocessing import Manager


shared_list = []

def worker(i):
    global shared_list
    time.sleep(1)
    shared_list.append(i)

if __name__ == '__main__':
    manager = Manager()
    shared_list = manager.list()

    process_map(worker, range(20), max_workers=5)
    print(shared_list)
Run Code Online (Sandbox Code Playgroud)

python multithreading multiprocessing tqdm

3
推荐指数
1
解决办法
9153
查看次数