pd.read_csv 然后 pd.concat 并行用于多个 txt 文件
pd.read_csv and then pd.concat in parallel for multiple txt files
我找不到任何专门针对此的内容,而且似乎无法获得任何 dask 或 pool 的组合来无误地执行我需要的操作。
我的需要是读取十几个或更多具有特定命名约定的 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 分钟,并希望同时 运行 缩短这段时间。谢谢!
您在评论中提到您的 CPU 利用率很低,未接近 100%。这意味着您受到磁盘吞吐量或内存带宽的限制。因此,分配更多 CPU 个核心来处理此任务只会减慢它的速度。相反,您应该专注于减少 IO 和内存消耗。
使用 pd.read_csv()
的 usecols
选项是一个很好的开始。此外,尝试传递 engine='c'
和显式 dtype
以避免 Pandas 每次都必须猜测数据类型。
您也可能受益于 SSD。
您还应该考虑以更高效的格式存储数据。例如 np.save()
和朋友制作的格式。这可以将加载速度提高 100 倍。
我找不到任何专门针对此的内容,而且似乎无法获得任何 dask 或 pool 的组合来无误地执行我需要的操作。
我的需要是读取十几个或更多具有特定命名约定的 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 分钟,并希望同时 运行 缩短这段时间。谢谢!
您在评论中提到您的 CPU 利用率很低,未接近 100%。这意味着您受到磁盘吞吐量或内存带宽的限制。因此,分配更多 CPU 个核心来处理此任务只会减慢它的速度。相反,您应该专注于减少 IO 和内存消耗。
使用 pd.read_csv()
的 usecols
选项是一个很好的开始。此外,尝试传递 engine='c'
和显式 dtype
以避免 Pandas 每次都必须猜测数据类型。
您也可能受益于 SSD。
您还应该考虑以更高效的格式存储数据。例如 np.save()
和朋友制作的格式。这可以将加载速度提高 100 倍。