python pandasでCSVファイルのデータ読み書きする
listデータをcsvファイルに保存したり、
csvファイルをlistで読み込む必要があったため備忘録。
目次
pandasのインストール
- pipでインストールする
pip3 install pandas
listデータをCSVファイルに保存する
1. 保存したいlistデータをdict化する
#! /usr/bin/python3 import pandas as pd import random # 保存listデータを作成 filenames = [] sizes = [] points = [] cnt = 10 for i in range(cnt): filename = "test_{}.jpg".format(i) w = random.randint(500,2000) h = random.randint(500,1000) size = [w,h] pmax = 5 point = [] for i in range(pmax): ux = random.randint(500,w-1) uy = random.randint(500,h-1) bx = random.randint(ux,w) by = random.randint(uy,h) point.append([ux,uy,bx,by]) filenames.append(filename) sizes.append(size) points.append(point) # list >> dict data_dict = { "filename":filenames, "size":sizes, "points":points }
2. dictデータをデータフレーム化する
- pandas.DataFrame.from_dict()を使用
# dict >> DataFrame df_data = pd.DataFrame.from_dict(data_dict) print(df_data)
- dict化したことでHeaderが挿入され理解しやすいCSVファイルになる
# df_data(DataFrame) filename size points 0 test_0.jpg [1947, 965] [[1763, 843, 1794, 901], [1611, 569, 1745, 821... 1 test_1.jpg [696, 762] [[635, 646, 670, 701], [681, 538, 696, 633], [... 2 test_2.jpg [692, 555] [[672, 507, 688, 532], [679, 512, 684, 522], [... 3 test_3.jpg [588, 666] [[526, 506, 554, 600], [568, 504, 584, 643], [... 4 test_4.jpg [1028, 883] [[806, 557, 806, 860], [826, 682, 943, 738], [... 5 test_5.jpg [733, 647] [[717, 521, 721, 522], [698, 610, 722, 612], [... 6 test_6.jpg [691, 667] [[579, 625, 644, 644], [610, 551, 626, 648], [... 7 test_7.jpg [1549, 762] [[805, 550, 840, 721], [760, 722, 1014, 724], ... 8 test_8.jpg [1782, 988] [[558, 832, 1751, 870], [1001, 551, 1172, 639]... 9 test_9.jpg [1916, 534] [[1724, 524, 1874, 530], [739, 521, 1879, 529]...
3. DataFrameをCSVファイルとして保存する
# DataFrame >> csv df_data.to_csv("test.csv")
CSVファイルをlistデータとして読み込む
1. CSVファイルをデータフレームで読み込む
- pandas.read_csv(CSV_PATH)で読み込む
# csvファイルの読み込み(データフレーム) df_read = pd.read_csv("test.csv", index_col=0)
2. データフレームをlistに変換する
- DataFarame.values.tolist()で行ごとにlist化する
- DataFarame.values.T.tolist()で列ごとにlist化する
# データフレームをlistに変換(行ごと) data_row = df_read.values.tolist() print("row:{}".format(data_row[0])) # データフレームをlistに変換(行ごと) data_col = df_read.values.T.tolist() print("col:{}".format(data_col[0]))
- 出力結果
row:['test_0.jpg', '[933, 578]', '[[908, 507, 925, 575], [502, 502, 796, 540], [691, 546, 729, 551], [750, 546, 790, 547], [762, 571, 852, 574]]'] col:['test_0.jpg', 'test_1.jpg', 'test_2.jpg', 'test_3.jpg', 'test_4.jpg', 'test_5.jpg', 'test_6.jpg', 'test_7.jpg', 'test_8.jpg', 'test_9.jpg']