我正在尝试使用. dask.dataframe
原始数据框有列'date'、'ticker'、'open'、'close'等...
我的目标是创建一个新的数据框,其中索引“日期”和列作为每个唯一代码的收盘价。
以下代码可以解决问题,但速度很慢,使用了将近一分钟的时间N = 6
。我怀疑 dask 尝试在 for 循环中多次读取 CSV 文件,但我不知道如何让这更快。我最初的猜测是在df.groupby('ticker')
某个地方使用会有所帮助,但我对熊猫还不够熟悉。
import dask.dataframe as dd
from functools import reduce
def load_and_fix_csv(path: str, N: int, tickers: list = None) -> dd.DataFrame:
raw = dd.read_csv(path, parse_dates=["date"])
if tickers is None:
tickers = raw.ticker.unique().compute()[:N] # Get unique tickers
dfs = []
for tick in tickers:
tmp = raw[raw.ticker == tick][["date", "close"]] # Temporary dataframe from specific ticker with columns date, close
dfs.append(tmp)
df = reduce(lambda x, y: dd.merge(x, y, how="outer", on="date"), dfs) # Merge all dataframes on date
df = df.set_index("date").compute()
return df
感谢您提供各种帮助!谢谢你。