import dask
import dask.dataframe as dd
from dask.delayed import delayed
import pandas as pd
我正在使用dask的delay和read_delay来执行此操作,因为它可以正常工作并且运行很快。这是我的难题...
dfc = [delayed(pd.read_csv)(u)[['UserID', 'ConversionDate']] for u in conversions]
dfs = [delayed(pd.read_csv)(u)[['UserID', 'EventDate']] for u in standard]
这很好。然后我这样做...
df = dd.from_delayed(dfc)
,它为我提供了一个约800万个长度的数据帧。好,很好。但是我这样做...
ds = dd.from_delayed(dfs)
然后出现以下错误...
ValueError: ('Multiple files found in compressed zip file %s', "['MM_CLD_Standard_Agency_142087_Daily_191101_00.csv', 'MM_CLD_Standard_Agency_142087_Daily_191101_01.csv', 'MM_CLD_Standard_Agency_142087_Daily_191101_02.csv', 'MM_CLD_Standard_Agency_142087_Daily_191101_03.csv', 'MM_CLD_Standard_Agency_142087_Daily_191101_04.csv']")
因此您可以看到该zip文件中有多个csv。我想像第一个一样轻松提取所有这些csv。将会有更多的数据,但是敏捷应该能够处理它。我该怎么做?
此外,在那之后,我需要离开df
上的ds
和'UserID'
并重新设置索引。
请帮助!谢谢!
答案 0 :(得分:1)
好的,我必须制作一些数据才能使用,所以我使用了this dataset。
import pandas as pd
cols = ["mpg", "cylinders", "displacement",
"horsepower", "weight", "acceleration",
"model_year", "origin", "car_name"]
df = pd.read_csv("auto-mpg.data", sep="\s+",
header=None, names=cols)
df[:100].to_csv("auto_1.csv")
df[100:200].to_csv("auto_2.csv")
df[200:300].to_csv("auto_3.csv")
df[300:].to_csv("auto_4.csv")
然后我将文件压缩到一个zip存档中。 (右键单击->压缩。可以在zipfile
中完成操作,但我不知道如何操作。)
下一步,读取压缩文件,然后将其中的文件添加到dask数据框中。
from zipfile import ZipFile
import dask.dataframe as dd
import os
wd = '/path/to/zip/files'
file_list = os.listdir(wd)
destdir = '/extracted/destination/'
ddf = dd.from_pandas(pd.DataFrame())
for f in file_list:
with ZipFile(wd + f, "r") as zip:
print(zip.namelist())
zip.extractall(destdir, None, None)
df = dd.read_csv(zip.namelist(), usecols=['Enter', 'Columns', 'Here'], parse_dates=['Date'])
ddf = ddf.append(df)
ddf.compute()
输出:
['auto_4.csv', 'auto_3.csv', 'auto_2.csv', 'auto_1.csv']
Unnamed: 0 mpg cylinders displacement horsepower weight \
0 300 23.9 8 260.0 90.00 3420.0
1 301 34.2 4 105.0 70.00 2200.0
2 302 34.5 4 105.0 70.00 2150.0
3 303 31.8 4 85.0 65.00 2020.0
4 304 37.3 4 91.0 69.00 2130.0
5 305 28.4 4 151.0 90.00 2670.0
如您所见,Unnamed: 0
是原始索引,现在已乱序。您可以删除它,对ddf
进行排序,等等。
如果其中还有其他文件,则可以使用glob
进行搜索,或者使用列表推导(如
print([file for file in file.namelist() if "auto" in file])