なぜ出力される要素が1つ少ないのか
Q&A
Closed
解決したいこと
Pythonとpandasライブラリを使用しています。
100件のレコードがあるDataFrameから、[10 : 100 : 100/4]でスライスしようとしています。
同じように要素を出力する3つの手段で値を出力させようとしたとき、
なぜかstep(100/4)の値によって、出力する要素数が1つ少なかったり、同じだったりします。
なぜなのか、気になりました。
追記(2021/02/05)
公式ドキュメント
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html
の、"Getting values on a DataFrame with an index that has integer labels" の項で、ちゃんと説明がありました
大変申し訳ありませんでした。
該当するソースコード
少ない時
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.arange(100))
print(df1)
df1 = df1[10:100]
step = len(df1) // 4
print(len(df1))
print(step)
print()
myrange = slice(0,len(df1),step)
print(len(df1.index.values[myrange]))
print(len(df1[0].values[myrange]))
print(len(df1.loc[myrange,[0]].values))
print()
print((df1.index.values[myrange]))
print((df1[0].values[myrange]))
print((df1.loc[myrange,[0]].values))
実行結果
0
0 0
1 1
2 2
3 3
4 4
.. ..
95 95
96 96
97 97
98 98
99 99
[100 rows x 1 columns]
90
22
5
5
4 ← ここ
[10 32 54 76 98]
[10 32 54 76 98]
[[10]
[32]
[54]
[76]]
同じ時
- step = len(def1) // 4
+ step = len(def1) // 5
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.arange(100))
print(df1)
df1 = df1[10:100]
step = len(df1) // 5
print(len(df1))
print(step)
print()
myrange = slice(0,len(df1),step)
print(len(df1.index.values[myrange]))
print(len(df1[0].values[myrange]))
print(len(df1.loc[myrange,[0]].values))
print()
print((df1.index.values[myrange]))
print((df1[0].values[myrange]))
print((df1.loc[myrange,[0]].values))
実行結果
0
0 0
1 1
2 2
3 3
4 4
.. ..
95 95
96 96
97 97
98 98
99 99
[100 rows x 1 columns]
90
18
5
5
5 ← ここ
[10 28 46 64 82]
[10 28 46 64 82]
[[10]
[28]
[46]
[64]
[82]]
0