§72.Python忘備録 ファイル関連:CSV読み込みからpandasのDataFrame変換 | hitochan007のブログ(Pythonの勉強ブログ)

hitochan007のブログ(Pythonの勉強ブログ)

★Pythonの勉強記録を中心に●pomera DM200、●パソコン、●グルメ、●愛犬(トイプードル) などについてのブログです



★このPython忘備録は、プログラムを作る際に忘れていた関数などを思い出すための
ハンドブックを目指します

これまで通り、アプリケーションのテーマについての記事もどうぞご覧ください。  → Pythonプログラム目次リンク


Python忘備録の目次はこちら  → Python忘備録目次リンク




■CSVからFrameDataに変換■
●書式

インポート文:

import tkinter.filedialog as tkfd
import tkinter as tk
import csv
import numpy as np
from pandas import DataFrame,Series

dialectの設定:

csv.register_dialect('tab', delimiter='\t') #csvモジュール用設定 tsvデータ
csv.register_dialect('comma', delimiter=',') #csvモジュール用設定 csvデータ

DataFrame変換方法:

以下のようにCSVファイルから読み込んだリストをDataFrame関数に渡すだけ。
この場合は、最初の行から変換対象としているが、先頭行を何行かスキップするには0:→n:とすればよい(nはスキップしたい行数)


fd=DataFrame(DataCSV[0:])

あとはfdを煮るなり焼くなりいろいろと処理すれば良い。










CSV読み出しからDataFrame変換:

1
2
3
4
5
def test0():
from pandas import DataFrame,Series
DataCSV=csv_read('pd_data.csv', dialect='comma') #CSVファイルからデータを読み込みリスト化
fd=DataFrame(DataCSV[0:]) #最初の行からFrameDataにする(pandasモジュールのDataFrame関数を使う)
return fd #FrameDataを返す

syntax2html


CSV読み込み関数:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def csv_read(rfilename, dialect='comma'):
#――――――――――――――――――――――――――――――――――――――――
# csv module でcsvファイルを読み込む
#――――――――――――――――――――――――――――――――――――――――
csv.register_dialect('tab', delimiter='\t') #csvモジュール用設定 tsvデータ
csv.register_dialect('comma', delimiter=',') #csvモジュール用設定 csvデータ
data=[]
f = open(rfilename, 'rt')
try:
reader = csv.reader(f, dialect)
for row in reader:
data.append(row)
finally:
f.close()
return data

syntax2html


プログラム全体:test0()をtest()に変えると、ファイルダイアログで自由にファイルを選択できます。

  1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#■Python3
import tkinter.filedialog as tkfd
import tkinter as tk
import csv
import numpy as np
from pandas import DataFrame,Series

ver='CSVファイルをDataFrameに変換するプログラム G811'

#■汎用ルーチン
def file_type(): #ファイルタイプを設定する [('name','.ext')] name:ファイルの種類のコメント .ext:拡張子
ftype= [
('CSV Files', '.csv'),
('log Files', '.log'),
('TSV Files', '.tsv'),
('Data Files', ('.csv', '.dat', '.txt','.tsv')),
('All Files', '.*')]
return ftype

def file_select(filetypes=[('all','.*')]): #ファイルダイアログ起動→ファイル名(フルパス)を戻す

rfilename = tkfd.askopenfilename(filetypes=file_type()) #ファイルダイアログ ※ファイルタイプは別関数で設定
return rfilename

def csv_read(rfilename, dialect='comma'):
#――――――――――――――――――――――――――――――――――――――――
# csv module でcsvファイルを読み込む
#――――――――――――――――――――――――――――――――――――――――
csv.register_dialect('tab', delimiter='\t') #csvモジュール用設定 tsvデータ
csv.register_dialect('comma', delimiter=',') #csvモジュール用設定 csvデータ
data=[]
f = open(rfilename, 'rt')
try:
reader = csv.reader(f, dialect)
for row in reader:
data.append(row)
finally:
f.close()
return data

def csv_write(wfilename,data,dialect='tab'):
#――――――――――――――――――――――――――――――――――――――――
# csv module でcsvファイルを読み込む
#――――――――――――――――――――――――――――――――――――――――
csv.register_dialect('tab', delimiter='\t') #csvモジュール用設定 tsvデータ
csv.register_dialect('comma', delimiter=',') #csvモジュール用設定 csvデータ
f = open(wfilename, 'wt')
try:
writer = csv.writer(f,
lineterminator='\n',dialect=dialect)
for x in range(len(data)):
writer.writerows([data[x]])
finally:
f.close()

#■テストルーチン

def data_gen(Data_no=1000): #サンプルデータ生成プログラム

data=[]
data.append(['file name:','pd_data.csv'])
data.append(['data name:','data for pandas testing'])
data.append(['start:','2015/06/21','18:35:12'])
data.append(['data number:',str(Data_no)])
data.append(['No','sec','x','ch1','ch2','ch3','ch4'])
data.append(['No','sec','x','sin(x)','cos(x)','tan(x)','x^2'])
x=np.arange(Data_no) #Data_no個分のシーケンシャル番号
x2=x*60 #60秒ごとのデータを設定
x3=np.linspace(-np.pi,np.pi,Data_no) #-Π~+ΠまでをData_no数で分割する
y1=np.sin(x3) #サインカーブ
y2=np.cos(x3) #コサインカーブ
y3=np.tan(x3) #タンジェント
y4=x3*x3 #二乗
for i in range(len(x)):
data.append([x[i],x2[i],x3[i],y1[i],y2[i],y3[i],y4[i]])
data=np.array(data)
wfilename='pd_data.csv'
csv_write(wfilename,data,dialect='comma')

wfilename='pd_data.tsv'
csv_write(wfilename,data,dialect='tab')

def test(): #FraameData変換
data_gen(Data_no=100) #サンプルデータを生成しておく。pd_data.csvとpd_data.tsvの両方を生成する。
csvfile = tkfd.askopenfilename(filetypes=file_type()) #ファイルダイアログ ※ファイルタイプは別関数で設定
if csvfile:
DataCSV=csv_read(csvfile, dialect='comma')
print('CSVファイルの行数は:',len(DataCSV))
fd=DataFrame(DataCSV[0:]) #最初の行からFrameDataにする
print(fd)
s=fd.describe() #FrameDataの概要を知るのに便利な関数(文字列を返す)
print(s)
else:
print('ファイルが選択されませんでした')

def test0():
from pandas import DataFrame,Series
DataCSV=csv_read('pd_data.csv', dialect='comma') #CSVファイルからデータを読み込みリスト化
fd=DataFrame(DataCSV[0:]) #最初の行からFrameDataにする(pandasモジュールのDataFrame関数を使う)
return fd #FrameDataを返す

#■--------------- main program ---------------
if __name__ == '__main__':
print(ver) #プログラムVerを表示
root = tk.Tk() #無駄な小窓を出さないようにするための2行
root.withdraw() #Window画面を取り除く
fd=test0() #テスト用ルーチンを呼び出す
print(fd) #framedataを出力
#--------------------------------------------

syntax2html



出力結果:

省略。(文字数制限にかかってしまいました)m(_ _)m


■目次:ファイル関連■


新しいブログをはじめました。pythonの初級者から中級者まで、役に立つ記事を掲載していますので、ご覧ください。

特にカスタム関数(ユーザー定義関数)は、便利に使えると思います。

ぜひぜひこのリンクをクリックしてください 

 Pythonを勉強して株で儲けるブログ