pandas - Dask:将 dask.DataFrame 转换为 xarray.Dataset
问题描述
这在熊猫中是可能的。
我想用 dask 来做。
编辑:在这里提出
仅供参考,您可以从xarray.Dataset 转到 Dask.DataFrame
使用.to_xarry 的熊猫解决方案:
import pandas as pd
import numpy as np
df = pd.DataFrame([('falcon', 'bird', 389.0, 2),
('parrot', 'bird', 24.0, 2),
('lion', 'mammal', 80.5, 4),
('monkey', 'mammal', np.nan, 4)],
columns=['name', 'class', 'max_speed',
'num_legs'])
df.to_xarray()
<xarray.Dataset>
Dimensions: (index: 4)
Coordinates:
* index (index) int64 0 1 2 3
Data variables:
name (index) object 'falcon' 'parrot' 'lion' 'monkey'
class (index) object 'bird' 'bird' 'mammal' 'mammal'
max_speed (index) float64 389.0 24.0 80.5 nan
num_legs (index) int64 2 2 4 4
解决方案?
import dask.dataframe as dd
ddf = dd.from_pandas(df, 1)
?
可以使用 xarray 寻找解决方案,但我认为它只有.from_dataframe。
import xarray as xr
ds = xr.Dataset()
ds.from_dataframe(ddf.compute())
解决方案
我一直在寻找类似的东西并创建了这个功能(它并不完美,但效果很好)。它还将所有 dask 数据保存为 dask 数组,以节省内存等。
import xarray as xr
import dask.dataframe as dd
def dask_2_xarray(ddf, indexname='index'):
ds = xr.Dataset()
ds[indexname] = ddf.index
for key in ddf.columns:
ds[key] = (indexname, ddf[key].to_dask_array().compute_chunk_sizes())
return ds
# use:
ds = dask_2_xarray(ddf)
例子:
path = LOCATION TO FILE
ddf_test = dd.read_hdf(path, key="/data*", sorted_index=True, mode='r')
ds = dask_2_xarray(ddf_test, indexname="time")
ds
大部分时间都花在计算块大小上,所以如果有人知道更好的方法来做到这一点,它会更快。
推荐阅读
- python - python blockchain api 使用 api 密钥检查余额
- r - 扩大数据和改变列
- reactjs - 在组件中传递 id
- flutter - 在 parse_server_sdk_flutter 中使用 LiveQuery 时显示 ReSubScription 的终端:{}
- php - Laravel 重命名集合键
- windows - 从 bash 脚本自动关闭 Windows 10 计算机
- c - 无法在 Windows 7 中使用 MinGW make 编译 C 程序
- mysql - Sequelize 在使用 TypeScript 时在 findAndCountAll() 中生成错误的 SQL 语句
- elasticsearch - Elasticsearch - 针对现有数据集测试新的分析器
- python - 使用 pip 升级软件包无法正常工作