Python のリストを Pandas の DataFrame に追加したり,新たな DataFrame を作ってみよう.
まずは準備として GitHub のリポジトリにあるサンプルデータ (clustering-sample.csv) を読み込みます.
CSV ファイルを読み込む
import pandas as pd
url = "https://github.com/rinsaka/sample-data-sets/blob/master/clustering-sample.csv?raw=true"
df = pd.read_csv(url)
print(df)
ID x y 0 0 7.4346 6.6520 1 1 6.5419 6.3611 2 2 8.9819 9.2461 3 3 3.8554 4.8386 4 4 1.9527 3.4848 .. ... ... ... 295 295 4.1205 1.5010 296 296 9.2843 1.7563 297 297 6.6627 7.3856 298 298 5.7654 6.0543 299 299 2.2411 1.0902 [300 rows x 3 columns]
データフレームをリストに変換します.
リストに変換
x = df['x'].tolist()
y = df['y'].tolist()
print(x)
print(y)
[7.4346, 6.5419, 8.9819, 3.8554, 1.9527, ...(中略)..., 4.1205, 9.2843, 6.6627, 5.7654, 2.2411] [6.652, 6.3611, 9.2461, 4.8386, 3.4848, ...(中略)..., 1.501, 1.7563, 7.3856, 6.0543, 1.0902]
内包表記を用いてリストの内容を2倍や3倍した新たなリストを作成します.
リスト x を2倍, y を3倍する
double_x = [v * 2 for v in x]
triple_y = [v * 3 for v in y]
print(double_x)
print(triple_y)
[14.8692, 13.0838, 17.9638, 7.7108, 3.9054, ...(中略)..., 8.241, 18.5686, 13.3254, 11.5308, 4.4822] [19.956, 19.0833, 27.738300000000002, 14.515799999999999, 10.4544 ...(中略)..., 4.503, 5.2689, 22.1568, 18.1629, 3.2706]
準備ができたので,データフレームにリストを追加してみよう.
データフレームにリストを追加する
df['double x'] = double_x
print(df)
ID x y double x 0 0 7.4346 6.6520 14.8692 1 1 6.5419 6.3611 13.0838 2 2 8.9819 9.2461 17.9638 3 3 3.8554 4.8386 7.7108 4 4 1.9527 3.4848 3.9054 .. ... ... ... ... 295 295 4.1205 1.5010 8.2410 296 296 9.2843 1.7563 18.5686 297 297 6.6627 7.3856 13.3254 298 298 5.7654 6.0543 11.5308 299 299 2.2411 1.0902 4.4822 [300 rows x 4 columns]
もう1列データフレームにリストを追加しよう.
データフレームにリストを追加する
df['triple_y'] = triple_y
print(df)
ID x y double x triple y 0 0 7.4346 6.6520 14.8692 19.9560 1 1 6.5419 6.3611 13.0838 19.0833 2 2 8.9819 9.2461 17.9638 27.7383 3 3 3.8554 4.8386 7.7108 14.5158 4 4 1.9527 3.4848 3.9054 10.4544 .. ... ... ... ... ... 295 295 4.1205 1.5010 8.2410 4.5030 296 296 9.2843 1.7563 18.5686 5.2689 297 297 6.6627 7.3856 13.3254 22.1568 298 298 5.7654 6.0543 11.5308 18.1629 299 299 2.2411 1.0902 4.4822 3.2706 [300 rows x 5 columns]
なお,別途リストを準備することなく,データフレームのある列を用いて新たな列を追加することも可能です.例えば「x」列の平方根を計算して「sqrt x」列を追加します.
データフレームに列を追加する
import numpy as np
df['sqrt x'] = np.sqrt(df['x'])
print(df)
ID x y double x triple y sqrt x 0 0 7.4346 6.6520 14.8692 19.9560 2.726646 1 1 6.5419 6.3611 13.0838 19.0833 2.557714 2 2 8.9819 9.2461 17.9638 27.7383 2.996982 3 3 3.8554 4.8386 7.7108 14.5158 1.963517 4 4 1.9527 3.4848 3.9054 10.4544 1.397390 .. ... ... ... ... ... ... 295 295 4.1205 1.5010 8.2410 4.5030 2.029901 296 296 9.2843 1.7563 18.5686 5.2689 3.047015 297 297 6.6627 7.3856 13.3254 22.1568 2.581221 298 298 5.7654 6.0543 11.5308 18.1629 2.401125 299 299 2.2411 1.0902 4.4822 3.2706 1.497030 [300 rows x 6 columns]
リストから新たなデータフレームを作成する場合は次のように記述します.
リストから新たなデータフレームを作成する
new_df = pd.DataFrame({'double x':double_x, 'triple y':triple_y})
print(new_df)
double x triple y 0 14.8692 19.9560 1 13.0838 19.0833 2 17.9638 27.7383 3 7.7108 14.5158 4 3.9054 10.4544 .. ... ... 295 8.2410 4.5030 296 18.5686 5.2689 297 13.3254 22.1568 298 11.5308 18.1629 299 4.4822 3.2706 [300 rows x 2 columns]