我找不到专门针对此的任何东西,而且似乎也没有任何组合来完成我需要的操作而没有错误。
我需要读取具有特定命名约定的十几个或更多txt文件(在四个文件夹中,因此使用递归方法),然后将它们全部合并在一起。所有文件具有相同的列名,但每个文件的长度都不同。
这是我现在可以执行并使其运行但想要并行运行的方式:
path1 = my specific filepath
file_list = glob.glob(os.path.join(path1, "*\\XT*.txt"), recursive =
True)
df_each = (pd.read_csv(f, sep = '|') for f in file_list)
df = pd.concat(df_each, ignore_index = True)
然后有一些小事情需要清理和更改,我已经这样做了:
df.replace{("#":""}, regex = True, inplace = True
df.columns = df.columns.str.replace("#", "")
我需要的所有文件的最终目的是对每列的总和进行汇总,并按以下方式进行专门分组:
df_calc = df.groupby(['Name1', 'Name2']).sum()
现在大约需要30分钟才能运行,并且希望并行运行以减少此时间。谢谢!
答案 0 :(得分:1)
您在评论中提到您的CPU使用率很低,不是100%。这意味着您受到磁盘吞吐量或内存带宽的限制。因此,分配更多的CPU内核来执行此任务只会减慢它的速度。相反,您应该集中精力减少IO和内存消耗。
使用usecols
的{{1}}选项是一个很好的开始。另外,请尝试传递pd.read_csv()
和显式engine='c'
以避免熊猫每次都猜测dtype。
您还可能会受益于SSD。
您还应该考虑以更有效的格式存储数据。例如dtype
和朋友产生的格式。这样可以将加载速度提高100倍。