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を出力 #--------------------------------------------
|