python pandas csv excel read&write sort max min average

csvファイルを読み込む場合、pandasを使ったほうが、配列に読み込むに比べて随分楽だ。6行t対1行でpandasの勝ちだ

#
#リストに読み込むとき
data=[]
with open(filename,mode='r',newline='')as fp:
    reader=csv.reader(fp)
    for row in reader:
        #print(row)
        data.append(row)

#pandasに読み込む
df_csv = pd.read_csv(filename,index_col=0)

CSVファイルをpandasでDataFrameに読み込んで、
CSVとexcelファイルに書き出す。

#
#-------------------------------------------------------------------------------
# Name:        module1
# Purpose:
#
# Author:      leoco
#
# Created:     29/02/2020
# Copyright:   (c) leoco 2020
# Licence:     <your licence>
#-------------------------------------------------------------------------------
import pandas as pd
import os, tkinter, tkinter.filedialog, tkinter.messagebox
import csv
from os import path


def get_filename():
# ファイル選択ダイアログの表示
    root = tkinter.Tk()
    root.withdraw()
    fTyp = [("",".csv")]#fTyp = [("","*")]すべての種類
    iDir = os.path.abspath(os.path.dirname(__file__))
    file = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir)
    return file

ohlc = pd.read_csv(get_filename(),index_col=0)
    #"C:/github/sample/python/pandas/basic/anko.csv", index_col=0)
print(ohlc)
#----------------------------------------------

# データフレームをCSVファイルに書き込む
ohlc.to_csv(input('output filename?(.csv)')+".csv")

# データフレームをExcelファイルに書き込む
ohlc.to_excel(input('output filename?(.xls)')+".xls")

 

csvを読み込んで内容を書き出した画面

 

                  open    high     low   close      volume
datetime                                                  
2020/1/9 10:00  880665  880684  880304  880638   48.342958
2020/1/9 10:01  880599  880712  879515  879991   84.363229
2020/1/9 10:02  880007  881193  880007  881002   88.646550
2020/1/9 10:03  881138  881205  880215  880281   51.271963
2020/1/9 10:04  880323  880646  879880  880264   59.547281
2020/1/9 10:05  880230  880676  879939  880375   55.174840
2020/1/9 10:06  880375  880426  879867  880063   38.482309
2020/1/9 10:07  880063  881305  880053  881247   52.670513
2020/1/9 10:08  880923  881146  880245  881000   72.216712
2020/1/9 10:09  881000  881802  880965  881780   60.532654
2020/1/9 10:10  881787  881934  881119  881123   52.249143
2020/1/9 10:11  881000  881860  880861  881554   41.910211
2020/1/9 10:12  881674  882247  881442  881762   60.045865
2020/1/9 10:13  881669  882436  881606  882204   55.097271
2020/1/9 10:14  882198  882608  881670  881906   67.920673
2020/1/9 10:15  881953  882615  881630  882542   59.426518
2020/1/9 10:16  882545  883762  882299  883471   97.712122
2020/1/9 10:17  883552  883897  882056  882384  112.985775
2020/1/9 10:18  882357  882941  882096  882163   42.485714
output filename?(.csv)olhc02
output filename?(.xls)olhc01

 

書き出したCSV

書き出したエクセル

並び替え、簡単すぎる

#並び替え
#sort 列highで昇順(True)
ohlc2=ohlc.sort_values('high',ascending=True)
print(ohlc2)

結果 high 列が昇順になっている

#
                  open    high     low   close     volume
datetime                                                 
2020/1/9 10:00  880665  880684  880304  880638  48.342958
2020/1/9 10:01  880599  880712  879515  879991  84.363229
2020/1/9 10:02  880007  881193  880007  881002  88.646550
2020/1/9 10:03  881138  881205  880215  880281  51.271963
2020/1/9 10:04  880323  880646  879880  880264  59.547281
2020/1/9 10:05  880230  880676  879939  880375  55.174840
2020/1/9 10:06  880375  880426  879867  880063  38.482309
2020/1/9 10:07  880063  881305  880053  881247  52.670513
2020/1/9 10:08  880923  881146  880245  881000  72.216712
                  open    high     low   close     volume
datetime                                                 
2020/1/9 10:06  880375  880426  879867  880063  38.482309
2020/1/9 10:04  880323  880646  879880  880264  59.547281
2020/1/9 10:05  880230  880676  879939  880375  55.174840
2020/1/9 10:00  880665  880684  880304  880638  48.342958
2020/1/9 10:01  880599  880712  879515  879991  84.363229
2020/1/9 10:08  880923  881146  880245  881000  72.216712
2020/1/9 10:02  880007  881193  880007  881002  88.646550
2020/1/9 10:03  881138  881205  880215  880281  51.271963
2020/1/9 10:07  880063  881305  880053  881247  52.670513

 

行ラベル列ラベルの取り出し

#
print(ohlc.columns)#列ラベル
print(ohlc.index)#インデックス(行ラベル)
#出力
Index(['open', 'high', 'low', 'close', 'volume'], dtype='object')
Index(['2020/1/9 10:00', '2020/1/9 10:01', '2020/1/9 10:02', '2020/1/9 10:03',
       '2020/1/9 10:04', '2020/1/9 10:05', '2020/1/9 10:06', '2020/1/9 10:07',
       '2020/1/9 10:08'],

 

データ型

#
print(ohlc.dtypes)#データ型
#出力
open        int64
high        int64
low         int64
close       int64
volume    float64
dtype: object

 

基本統計自動出力

#
print(ohlc['open'].describe())#基本統計
print(ohlc['volume'].describe())#基本統計
#出力
count         9.000000
mean     880480.333333(平均)
std         382.980091(標準偏差)
min      880007.000000(最小値)
25%      880230.000000(25%の位置)
50%      880375.000000(50)
75%      880665.000000(75)
max      881138.000000(最大値)
Name: open, dtype: float64
count     9.000000
mean     61.190706
std      16.966749
min      38.482309
25%      51.271963
50%      55.174840
75%      72.216712
max      88.646550
Name: volume, dtype: float64