将 pandas 数据帧转换为 xarray 数据集
converting pandas dataframe to xarray dataset
Unnamed: 0 index datetime ... cVI Reg average_temp
0 0 2000-01-01 2000-01-01 ... NaN Central -5.883996
1 1 2000-01-02 2000-01-02 ... NaN Central -6.715087
2 2 2000-01-03 2000-01-03 ... NaN Central -6.074254
3 3 2000-01-04 2000-01-04 ... NaN Central -4.222387
4 4 2000-01-05 2000-01-05 ... NaN Central -0.994825
我想将上面的dataframe转换为一个xarray数据集,以datetime
作为索引。我这样做:
ds = xr.Dataset.from_dataframe(df)
但我无法将 datetime
列作为索引。我该怎么做?
xarray 会将数据框中的索引视为结果数据集的维度。 MultiIndex 将被取消堆叠,这样每个级别将在结果中形成一个新的正交维度。
要将您的数据转换为 xarray,首先将日期时间设置为 pandas 中的索引,使用 df.set_index('datetime')
。
ds = df.set_index('datetime').to_xarray()
或者,您可以在之后使用 ds.set_coords('datetime')
对其进行推广,然后将索引维度与 ds.swap_dims
:
交换
ds = df.to_xarray()
ds.set_coords('datetime').swap_dims({'index': 'datetime'})
我推荐第一个选项,但如果您已经将数据作为数据集并想要交换索引,则第二个选项也适用。
首先在所需列上使用 pd.to_datetime
and df.set_index
:
df['datetime'] = pd.to_datetime(df['datetime'])
df = df.set_index('datetime')
# cVI Reg average_temp
# datetime
# 2000-01-01 NaN Central -5.883996
# 2000-01-02 NaN Central -6.715087
# 2000-01-03 NaN Central -6.074254
# 2000-01-04 NaN Central -4.222387
# 2000-01-05 NaN Central -0.994825
然后您的 xr.Dataset.from_dataframe
代码将按预期工作:
ds = xr.Dataset.from_dataframe(df)
# <xarray.Dataset>
# Dimensions: (datetime: 5)
# Coordinates:
# * datetime (datetime) datetime64[ns] 2000-01-01 2000-01-02 ... 2000-01-05
# Data variables:
# cVI (datetime) float64 nan nan nan nan nan
# Reg (datetime) object 'Central' 'Central' ... 'Central' 'Central'
# average_temp (datetime) float64 -5.884 -6.715 -6.074 -4.222 -0.9948
或者如 Michael 所说,使用 df.to_xarray
:
从 pandas 端转换它
ds = df.to_xarray()
# <xarray.Dataset>
# Dimensions: (datetime: 5)
# Coordinates:
# * datetime (datetime) datetime64[ns] 2000-01-01 2000-01-02 ... 2000-01-05
# Data variables:
# cVI (datetime) float64 nan nan nan nan nan
# Reg (datetime) object 'Central' 'Central' ... 'Central' 'Central'
# average_temp (datetime) float64 -5.884 -6.715 -6.074 -4.222 -0.9948
Unnamed: 0 index datetime ... cVI Reg average_temp
0 0 2000-01-01 2000-01-01 ... NaN Central -5.883996
1 1 2000-01-02 2000-01-02 ... NaN Central -6.715087
2 2 2000-01-03 2000-01-03 ... NaN Central -6.074254
3 3 2000-01-04 2000-01-04 ... NaN Central -4.222387
4 4 2000-01-05 2000-01-05 ... NaN Central -0.994825
我想将上面的dataframe转换为一个xarray数据集,以datetime
作为索引。我这样做:
ds = xr.Dataset.from_dataframe(df)
但我无法将 datetime
列作为索引。我该怎么做?
xarray 会将数据框中的索引视为结果数据集的维度。 MultiIndex 将被取消堆叠,这样每个级别将在结果中形成一个新的正交维度。
要将您的数据转换为 xarray,首先将日期时间设置为 pandas 中的索引,使用 df.set_index('datetime')
。
ds = df.set_index('datetime').to_xarray()
或者,您可以在之后使用 ds.set_coords('datetime')
对其进行推广,然后将索引维度与 ds.swap_dims
:
ds = df.to_xarray()
ds.set_coords('datetime').swap_dims({'index': 'datetime'})
我推荐第一个选项,但如果您已经将数据作为数据集并想要交换索引,则第二个选项也适用。
首先在所需列上使用 pd.to_datetime
and df.set_index
:
df['datetime'] = pd.to_datetime(df['datetime'])
df = df.set_index('datetime')
# cVI Reg average_temp
# datetime
# 2000-01-01 NaN Central -5.883996
# 2000-01-02 NaN Central -6.715087
# 2000-01-03 NaN Central -6.074254
# 2000-01-04 NaN Central -4.222387
# 2000-01-05 NaN Central -0.994825
然后您的 xr.Dataset.from_dataframe
代码将按预期工作:
ds = xr.Dataset.from_dataframe(df)
# <xarray.Dataset>
# Dimensions: (datetime: 5)
# Coordinates:
# * datetime (datetime) datetime64[ns] 2000-01-01 2000-01-02 ... 2000-01-05
# Data variables:
# cVI (datetime) float64 nan nan nan nan nan
# Reg (datetime) object 'Central' 'Central' ... 'Central' 'Central'
# average_temp (datetime) float64 -5.884 -6.715 -6.074 -4.222 -0.9948
或者如 Michael 所说,使用 df.to_xarray
:
ds = df.to_xarray()
# <xarray.Dataset>
# Dimensions: (datetime: 5)
# Coordinates:
# * datetime (datetime) datetime64[ns] 2000-01-01 2000-01-02 ... 2000-01-05
# Data variables:
# cVI (datetime) float64 nan nan nan nan nan
# Reg (datetime) object 'Central' 'Central' ... 'Central' 'Central'
# average_temp (datetime) float64 -5.884 -6.715 -6.074 -4.222 -0.9948