我正在使用 Sagemaker 笔记本,在导入 vaex 时,出现以下错误。我使用的vaex版本是4.16.0
PydanticImportError:BaseSettings已移至pydantic-settings包中。有关更多详细信息,请参阅https://docs.pydantic.dev/2.0.2/migration/#basesettings-has-moved-to-pydantic-settings。
有关更多信息,请访问https://errors.pydantic.dev/2.0.2/u/import-error
有人知道如何解决这个问题吗?
我尝试在安装 vaex 时降级 pydantic 库,但这没有帮助。
我有 2 个文本文件 (*.txt),其中包含以下格式的唯一字符串:
udtvbacfbbxfdffzpwsqzxyznecbqxgebuudzgzn:refmfxaawuuilznjrxuogrjqhlmhslkmprdxbascpoxda
ltswbjfsnejkaxyzwyjyfggjynndwkivegqdarjg:qyktyzugbgclpovyvmgtkihxqisuawesmcvsjzukcbrzi
Run Code Online (Sandbox Code Playgroud)
第一个文件包含5000 万行(4.3 GB),第二个包含100 万行(112 MB)。一行包含 40 个字符、分隔符 : 和另外 45 个字符。
任务:获取两个文件的唯一值。也就是说,您需要一个csv 或 txt文件,其中的行在第二个文件中而不在第一个文件中。
我正在尝试使用vaex ( Vaex )来做到这一点:
import vaex
base_files = ['file1.txt']
for i, txt_file in enumerate(base_files, 1):
for j, dv in enumerate(vaex.from_csv(txt_file, chunk_size=5_000_000, names=['data']), 1):
dv.export_hdf5(f'hdf5_base/base_{i:02}_{j:02}.hdf5')
check_files = ['file2.txt']
for i, txt_file in enumerate(check_files, 1):
for j, dv in enumerate(vaex.from_csv(txt_file, chunk_size=5_000_000, names=['data']), 1):
dv.export_hdf5(f'hdf5_check/check_{i:02}_{j:02}.hdf5')
dv_base = vaex.open('hdf5_base/*.hdf5')
dv_check = vaex.open('hdf5_check/*.hdf5')
dv_result = dv_check.join(dv_base, on='data', …Run Code Online (Sandbox Code Playgroud) 我目前使用 Vaex 为直方图生成分箱数据并抽取大的时间序列数据。本质上,我将数百万个时间序列点减少到多个 bin 中,并计算每个 bin 的均值、最大值和最小值。我想比较Vaex(读取 HDF 文件)和 Dask(读取 Parquet 文件)并将其保持在“核外内存”。
Dask 在第一次运行时比 Vaex 快 30%,但在重复运行时 Vaex 快 4.5 倍。我相信 Vaex 通过内存映射获得了这种加速。Dask 有没有办法改善重复运行的执行时间?
首先,创建一些随机数据并生成一些文件,警告:这将生成 1.5GB 的数据。
import numpy as np
import vaex as vx
import pandas as pd
import dask.dataframe as dd
import os
#cwd = os.getcwd() # Change this to your directory for path to save hdf and parquet files
cwd = r'F:\temp\DaskVaexx' # Write files to this directory. Use a fast SSD for …Run Code Online (Sandbox Code Playgroud) 在使用 Python3.8 在 Pycharm 中安装 vaex 时出现错误 在我的 Win-10 64 位上运行此命令之前,我已经安装了以下命令:
- cmake v3.15.3
- pep517 v0.8.1
- pip v19.3.1
Run Code Online (Sandbox Code Playgroud)
错误日志:
running build_ext
creating build\temp.win-amd64-3.8
creating build\temp.win-amd64-3.8\Release
-- Running cmake for pyarrow
cmake -DPYTHON_EXECUTABLE=C:\Users\xxxxx\AppData\Local\Programs\Python\Python38\python.exe -G "Visual Studio 14 2015 Win64" -DPYARROW_BOOST_USE_SHARED=on -DCMAKE_BUILD_TYPE=release C:\Users\xxxxx\AppData\Local\Temp\pip-install-g3tufyo5\pyarrow
error: command 'cmake' failed: No such file or directory
----------------------------------------
ERROR: Failed building wheel for pyarrow
ERROR: Could not build wheels for pyarrow which use PEP 517 and cannot be installed directly.
Run Code Online (Sandbox Code Playgroud)
知道吗,我缺少什么?
有没有办法使用 vaex DataFrameArray 的 groupby 函数将自定义函数应用于组?
我可以:
df_vaex.groupby(['col_x1','col_x2','col_x3','col_x4'], agg=vaex.agg.mean(df_vaex['col_y']))
但是有没有办法做熊猫:
df.groupby(['col_x1','col_x2','col_x3','col_x4']).apply(lambda x: my_own_function(x['col_y']))
我正在使用 python vaex,但我不知道如何删除数据框中的重复行。例如在熊猫中存在方法drop_duplicates()。vaex 有没有类似的功能?
我有日期字符串(例如:3/24/2020),我想将其转换为datetime64[ns]格式
df2['date'] = pd.to_datetime(df1["str_date"], format='%m/%d/%Y')
Run Code Online (Sandbox Code Playgroud)
在 vaex dataframe 上使用 pandasto_datetime会导致错误:
ValueError: time data 'str_date' does not match format '%m/%d/%Y' (match)
Run Code Online (Sandbox Code Playgroud)
我看到可能有重复的问题。
df2['pdate']=df2.date.astype('datetime64[ns]')
Run Code Online (Sandbox Code Playgroud)
然而,答案是类型转换。我的情况需要将格式('%m/%d/%Y')解析字符串为datetime64[ns],而不仅仅是类型转换。
解决方案:自定义函数,然后.apply
我有一个非常大的数据集,我通过 append 以块的形式写入 hdf5,如下所示:
with pd.HDFStore(self.train_store_path) as train_store:
for filepath in tqdm(filepaths):
with open(filepath, 'rb') as file:
frame = pickle.load(file)
if frame.empty:
os.remove(filepath)
continue
try:
train_store.append(
key='dataset', value=frame,
min_itemsize=itemsize_dict)
os.remove(filepath)
except KeyError as e:
print(e)
except ValueError as e:
print(frame)
print(e)
except Exception as e:
print(e)
Run Code Online (Sandbox Code Playgroud)
数据太大而无法加载到一个 DataFrame 中,因此我想尝试使用 vaex 进行进一步处理。不过有几件事我真的不明白。
由于 vaex 在 hdf5 中使用与 pandas/pytables (VOTable) 不同的表示形式,我想知道如何在这两种格式之间进行转换。我尝试将数据分块加载到 Pandas 中,将其转换为 vaex DataFrame 然后存储它,但似乎无法将数据附加到现有的 vaex hdf5 文件中,至少我找不到。
真的没有办法从 vaex 内部创建大型 hdf5 数据集吗?是将现有数据集转换为 vaex 表示的唯一选择(通过 python 脚本或 TOPCAT 构建文件)吗?
与我之前的问题相关,如果我在 vaex …
我在一个项目中使用 Python 中的 Vaex 库;我对 Vaex 还很陌生,所以如果这是初级的,我很抱歉。我遇到数据类型转换问题。我的其中一列“Paid_at”的数据类型为 str,它应该是 DateTime。 df_paid.info
到目前为止我所做的就是从我的 df 中删除 na 以及(尝试)使用 pandas 的 to_datetime() 来转换列,但它不起作用。这在 pd 数据框中有效,但我做错了,因为我收到以下错误
df_paid['Paid_at'] = pd.to_datetime(df['Paid_at'], errors='coerce')
Run Code Online (Sandbox Code Playgroud)
-------------------------------------------------- ------------------------- ValueError Traceback(最近一次调用最后)在 ----> 1 df_paid['Paid_at'] = pd.to_datetime (df['Paid_at'], 错误='强制')
F:\Anaconda3\lib\site-packages\vaex\dataframe.py in setitem (self, name, value) 4431 self.add_column(name, value)
4432 else: -> 4433 self.add_virtual_column(name, value) 4434 else : 4435 raise TypeError(' setitem仅接受字符串作为参数,而不是 {}'.format(type(name)))F:\Anaconda3\lib\site-packages\vaex\dataframe.py in add_virtual_column(self, name, expression, unique) 3249
'# 我们重写所有现有表达式(包括传递下来的表达式参数) 3250 self._rename(name,第3251章 3252 第3253章 3252 第3253章 3253F:\ Anaconda3 \ lib …