问题
我有一个可变数量的固定宽度文件,其中包含时间序列数据的大量通道。我需要提取用户指定的列并将它们保存到一个新的csv文件中。
固定宽度文件的数据格式
没有标题(列名信息/顺序/索引存储在一个单独的文件中)从2-11列thousands
<
H 214/code>F 215示例数据
0.0000000000000 0.0000000000000 0.0000000000000 0.0000000000000 0.0000000000000 0.0000000000000 0.0000000000000 0.0000000000000 0.0000000000000 0.0000000000000 0.0000000000000
0.20000000000000E-02 -0.78316746164705E-05 -0.55588946130087E-02 0.23977249743147E-02 1.0000000000000 -0.55055077745381E-07 0.0000000000000 -0.33601773744944E-10 0.24453720011883E-01 1.0000000000000 -0.48147397355603E-02
0.40000000000000E-02 -0.63538465850783E-02 -0.93035113950468E-01 0.35370312419918E-01 1.0000000000000 -0.99610928097310E-02 0.0000000000000 0.39549619607471E-03 0.26770274111205 1.0000000000000 -0.26102761850179E-01
0.60000000000000E-02 -0.33649747866341E-01 -0.12820456839496 0.15502082128837 1.0000000000000 -0.45260056706573E-01 0.0000000000000 0.23408807718764E-01 1.0563887132504 1.0000000000000 -0.72621886780765E-01示例操作
档案1:
Time A B C D档案2:
Time E F G档案3:
Time H I J K L M输出:
Time A B J K L我试过的
我试过使用Pandas、numpy和标准python阅读,但对我的应用程序来说太慢了。使用Dask时,我尝试分别将文件加载到Dask.dataframes中,创建时间列的副本,从每个数据帧中删除所有时间列,然后连接帧并为用户请求的列建立索引。
目标
我希望能够在一秒钟内完成来自25个文件(每个25000行)的100个通道的操作。如果有更好的方法我还没有考虑,请告诉我。
发布于 2021-02-10 18:01:27
不确定在一秒钟内是否可行,但我要做的是使用delayed并行处理工作的代码(但速度很慢)。看起来是这样的:
import dask
@dask.delayed
def my_func(filename):
# your custom code that works, but is slow
return df
# this is a list of dataframes
[computed_dfs] = dask.compute([my_func(f) for f in list_files])
# concatenate dfs
df_final = pd.concat(computed_dfs)注意,在您提到的问题中,您只想返回一些列,我将在my_func中实现这个列丢弃/子集逻辑,以减少从工作人员到客户端的数据传输量。
https://stackoverflow.com/questions/66141906
复制相似问题