为什么我的 pandas 数据框的选择形状是错误的
Why does the shape of the selection of my pandas dataframe is wrong
我有一个名为 df
的 pandas DataFrame,其中 df.shape
是 (53, 80)
,其中索引和列都是 int
.
如果我 select 这样第一行,我得到:
df.loc[0].shape
(80,)
而不是:
(1,80)
但是 df.loc[0:0].shape
或 df[0:1].shape
都显示正确的形状。
df.loc[0]
returns 一维 pd.Series
表示单行数据的对象,通过索引提取。
df.loc[0:0]
returns 一个 二维 pd.DataFrame
对象表示数据框中的一行数据,通过切片提取。
如果打印这些操作的结果,您可以更清楚地看到这一点:
import pandas as pd, numpy as np
df = pd.DataFrame(np.arange(9).reshape(3, 3))
res1 = df.loc[0]
res2 = df.loc[0:0]
print(type(res1), res1, sep='\n')
<class 'pandas.core.series.Series'>
0 0
1 1
2 2
Name: 0, dtype: int32
print(type(res2), res2, sep='\n')
<class 'pandas.core.frame.DataFrame'>
0 1 2
0 0 1 2
约定遵循 NumPy 索引/切片。这是很自然的,因为 Pandas 是建立在 NumPy 数组上的。
arr = np.arange(9).reshape(3, 3)
print(arr[0].shape) # (3,), i.e. 1-dimensional
print(arr[0:0].shape) # (0, 3), i.e. 2-dimensional
当您调用 df.iloc[0]
时,它选择第一行并且类型为 Series
而在其他情况下 df.iloc[0:0]
它正在对行进行切片并且类型为 dataframe
.而 Series
根据 pandas Series documentation :
One-dimensional ndarray with axis labels
而 dataframe
是 二维的 (pandas Dataframe documentation).
尝试 运行 以下几行以查看差异:
print(type(df.iloc[0]))
# <class 'pandas.core.series.Series'>
print(type(df.iloc[0:0]))
# <class 'pandas.core.frame.DataFrame'>
我有一个名为 df
的 pandas DataFrame,其中 df.shape
是 (53, 80)
,其中索引和列都是 int
.
如果我 select 这样第一行,我得到:
df.loc[0].shape
(80,)
而不是:
(1,80)
但是 df.loc[0:0].shape
或 df[0:1].shape
都显示正确的形状。
df.loc[0]
returns 一维 pd.Series
表示单行数据的对象,通过索引提取。
df.loc[0:0]
returns 一个 二维 pd.DataFrame
对象表示数据框中的一行数据,通过切片提取。
如果打印这些操作的结果,您可以更清楚地看到这一点:
import pandas as pd, numpy as np
df = pd.DataFrame(np.arange(9).reshape(3, 3))
res1 = df.loc[0]
res2 = df.loc[0:0]
print(type(res1), res1, sep='\n')
<class 'pandas.core.series.Series'>
0 0
1 1
2 2
Name: 0, dtype: int32
print(type(res2), res2, sep='\n')
<class 'pandas.core.frame.DataFrame'>
0 1 2
0 0 1 2
约定遵循 NumPy 索引/切片。这是很自然的,因为 Pandas 是建立在 NumPy 数组上的。
arr = np.arange(9).reshape(3, 3)
print(arr[0].shape) # (3,), i.e. 1-dimensional
print(arr[0:0].shape) # (0, 3), i.e. 2-dimensional
当您调用 df.iloc[0]
时,它选择第一行并且类型为 Series
而在其他情况下 df.iloc[0:0]
它正在对行进行切片并且类型为 dataframe
.而 Series
根据 pandas Series documentation :
One-dimensional ndarray with axis labels
而 dataframe
是 二维的 (pandas Dataframe documentation).
尝试 运行 以下几行以查看差异:
print(type(df.iloc[0]))
# <class 'pandas.core.series.Series'>
print(type(df.iloc[0:0]))
# <class 'pandas.core.frame.DataFrame'>