Pandas 切片中的奇怪行为
strange behaviour in Pandas slicing
发现使用 -ve 数字切片和由该切片构成的列表不匹配有点奇怪。为什么会这样?
dfl = DataFrame(np.random.randn(5,2),columns=list('AB'))
>>> dfl
A B
0 -0.775699 -0.622863
1 2.418822 0.747961
2 1.000536 0.036125
3 0.394238 -0.215857
4 0.374322 0.795460
>>> dfl.iloc[:,-1:]
B
0 -0.622863
1 0.747961
2 0.036125
3 -0.215857
4 0.795460
>>> list(dfl.iloc[:,-1:])
['B']
>>> list(dfl.iloc[:,1])
[-0.622863, 0.747961, 0.036125, -0.215857, 0.795460]
原因是因为您的第一个切片 returns 一个 DataFrame 而后者 returns 一个 Series:
In [183]:
type(dfl.iloc[:,-1:])
Out[183]:
pandas.core.frame.DataFrame
In [184]:
type(dfl.iloc[:,1])
Out[184]:
pandas.core.series.Series
df 上的调用列表returns 列
In [189]:
list(dfl)
Out[189]:
['A', 'B']
发现使用 -ve 数字切片和由该切片构成的列表不匹配有点奇怪。为什么会这样?
dfl = DataFrame(np.random.randn(5,2),columns=list('AB'))
>>> dfl
A B
0 -0.775699 -0.622863
1 2.418822 0.747961
2 1.000536 0.036125
3 0.394238 -0.215857
4 0.374322 0.795460
>>> dfl.iloc[:,-1:]
B
0 -0.622863
1 0.747961
2 0.036125
3 -0.215857
4 0.795460
>>> list(dfl.iloc[:,-1:])
['B']
>>> list(dfl.iloc[:,1])
[-0.622863, 0.747961, 0.036125, -0.215857, 0.795460]
原因是因为您的第一个切片 returns 一个 DataFrame 而后者 returns 一个 Series:
In [183]:
type(dfl.iloc[:,-1:])
Out[183]:
pandas.core.frame.DataFrame
In [184]:
type(dfl.iloc[:,1])
Out[184]:
pandas.core.series.Series
df 上的调用列表returns 列
In [189]:
list(dfl)
Out[189]:
['A', 'B']