【发布时间】:2020-07-08 09:37:35
【问题描述】:
我正在尝试使用dask.dataframe 操作来自https://www.kaggle.com/raymondsunartio/6000-nasdaq-stocks-historical-daily-prices 的csv 文件。原始数据框包含 'date'、'ticker'、'open'、'close'、 等列...
我的目标是创建一个新的数据框,其中索引 'date' 和列作为每个唯一代码的收盘价。
以下代码可以解决问题,但速度很慢,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
感谢您的各种帮助! 谢谢。
【问题讨论】:
标签: python python-3.x pandas dask dask-dataframe