データをN分割するときに、除算の商と余りをどうやって算出するんだっけ? とよくなるので、まとめてみます。
1から10の数字を用意し、それを3分割する例をやってみます。
# 分割に使うデータの準備 (1から10までの数字)
# list型
li = list(np.arange(1, 11))
print(li)
print(type(li))
# ndarray型
nda = np.arange(1, 11)
print(nda)
print(type(nda))
# pd.Series型
df = pd.Series(np.arange(1, 11))
print(df)
print(type(df))
# 分割に使うデータの準備 (1から10までの数字)
# list型
li = list(np.arange(1, 11))
print(li)
print(type(li))
# ndarray型
nda = np.arange(1, 11)
print(nda)
print(type(nda))
# pd.Series型
df = pd.Series(np.arange(1, 11))
print(df)
print(type(df))
# 分割に使うデータの準備 (1から10までの数字) # list型 li = list(np.arange(1, 11)) print(li) print(type(li)) # ndarray型 nda = np.arange(1, 11) print(nda) print(type(nda)) # pd.Series型 df = pd.Series(np.arange(1, 11)) print(df) print(type(df))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
<class 'list'>
[ 1 2 3 4 5 6 7 8 9 10]
<class 'numpy.ndarray'>
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
dtype: int32
<class 'pandas.core.series.Series'>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
<class 'list'>
[ 1 2 3 4 5 6 7 8 9 10]
<class 'numpy.ndarray'>
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
dtype: int32
<class 'pandas.core.series.Series'>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] <class 'list'> [ 1 2 3 4 5 6 7 8 9 10] <class 'numpy.ndarray'> 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 dtype: int32 <class 'pandas.core.series.Series'>
商と余り
除算に使う演算子は “/” です。
商と余りを算出する演算子は、それぞれ “//”, “%” です。
divmod() を使えば、商と余りをタプルで返してくれます。
# 除算 (被除数:dividend, 除数:divisor) (分母:numerator, 分子:denominator)
print('10 / 3 =', 10 / 3)
# 商 (quotient)
print('10 // 3 =', 10 // 3)
# 余り、剰余 (remainder)
print('10 % 3 =', 10 % 3)
# divmod()を使うと、商と余りをタプルで返してくれる。
print('divmod(10, 3) =', divmod(10, 3))
print('type(divmod(10, 3)) =', type(divmod(10, 3)))
# 除算 (被除数:dividend, 除数:divisor) (分母:numerator, 分子:denominator)
print('10 / 3 =', 10 / 3)
# 商 (quotient)
print('10 // 3 =', 10 // 3)
# 余り、剰余 (remainder)
print('10 % 3 =', 10 % 3)
# divmod()を使うと、商と余りをタプルで返してくれる。
print('divmod(10, 3) =', divmod(10, 3))
print('type(divmod(10, 3)) =', type(divmod(10, 3)))
# 除算 (被除数:dividend, 除数:divisor) (分母:numerator, 分子:denominator) print('10 / 3 =', 10 / 3) # 商 (quotient) print('10 // 3 =', 10 // 3) # 余り、剰余 (remainder) print('10 % 3 =', 10 % 3) # divmod()を使うと、商と余りをタプルで返してくれる。 print('divmod(10, 3) =', divmod(10, 3)) print('type(divmod(10, 3)) =', type(divmod(10, 3)))
10 / 3 = 3.3333333333333335
10 // 3 = 3
10 % 3 = 1
divmod(10, 3) = (3, 1)
type(divmod(10, 3)) = <class 'tuple'>
10 / 3 = 3.3333333333333335
10 // 3 = 3
10 % 3 = 1
divmod(10, 3) = (3, 1)
type(divmod(10, 3)) = <class 'tuple'>
10 / 3 = 3.3333333333333335 10 // 3 = 3 10 % 3 = 1 divmod(10, 3) = (3, 1) type(divmod(10, 3)) = <class 'tuple'>
分割してみる
divmod() を使って、list, ndarray, pd.Series のデータを分割してみます。
total = 10
split_num = 3
quotient, remainder = divmod(total, split_num)
for i in range(split_num):
print(li[i * quotient:i * quotient + quotient])
for i in range(split_num):
print(nda[i * quotient:i * quotient + quotient])
for i in range(split_num):
print(df[i * quotient:i * quotient + quotient].reset_index(drop=True))
total = 10
split_num = 3
quotient, remainder = divmod(total, split_num)
for i in range(split_num):
print(li[i * quotient:i * quotient + quotient])
for i in range(split_num):
print(nda[i * quotient:i * quotient + quotient])
for i in range(split_num):
print(df[i * quotient:i * quotient + quotient].reset_index(drop=True))
total = 10 split_num = 3 quotient, remainder = divmod(total, split_num) for i in range(split_num): print(li[i * quotient:i * quotient + quotient]) for i in range(split_num): print(nda[i * quotient:i * quotient + quotient]) for i in range(split_num): print(df[i * quotient:i * quotient + quotient].reset_index(drop=True))
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[1 2 3]
[4 5 6]
[7 8 9]
0 1
1 2
2 3
dtype: int32
0 4
1 5
2 6
dtype: int32
0 7
1 8
2 9
dtype: int32
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[1 2 3]
[4 5 6]
[7 8 9]
0 1
1 2
2 3
dtype: int32
0 4
1 5
2 6
dtype: int32
0 7
1 8
2 9
dtype: int32
[1, 2, 3] [4, 5, 6] [7, 8, 9] [1 2 3] [4 5 6] [7 8 9] 0 1 1 2 2 3 dtype: int32 0 4 1 5 2 6 dtype: int32 0 7 1 8 2 9 dtype: int32
余りの部分を入れたい場合は、コードを以下のように変えます。
for i in range(split_num):
if i == split_num - 1:
print(li[i * quotient:])
else:
print(li[i * quotient:i * quotient + quotient])
for i in range(split_num):
if i == split_num - 1:
print(li[i * quotient:])
else:
print(li[i * quotient:i * quotient + quotient])
for i in range(split_num): if i == split_num - 1: print(li[i * quotient:]) else: print(li[i * quotient:i * quotient + quotient])
[1, 2, 3]
[4, 5, 6]
[7, 8, 9, 10]
[1, 2, 3]
[4, 5, 6]
[7, 8, 9, 10]
[1, 2, 3] [4, 5, 6] [7, 8, 9, 10]