Kinaconの技術ブログ

Ubuntuはじめました。

python pandasでCSVファイルのデータ読み書きする

f:id:m-oota-711:20190126141150p:plain

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']