Udemyでもプログラミングを教えていますUdemy

pandasでcsvファイルを操作する

  • URLをコピーしました!

pandasをインストール

padasiは、表データを読み込んで、データの追加や抽出、集計、書き出しなどを行える外部ライブラリです。

windowsにインストールするときはコマンドプロンプト
pip install pandas

macOSにインストールするときは、ターミナル
pip3 install pandas

表データは、テーブルと呼ばれます。横方向に並んでいる行と、縦方向に並んでいる列でできています。

行は、レコードやロウとも呼ばれます。
列は、カラムや項目とも呼ばれます。

 

CSVファイルとは何か

表データをファイルに保存するときに、CSVファイルがよく使われます。CSVファイルとは、カンマで区切られたデータが何行も入ったテキストファイルです。ファイルの一行が1件のデータで、カンマで区切られた1つ1つが要素です。1番左に数字が並んでいます。これをインデックスといいます。

test.csvとstep3/step3.py(フォルダとファイル名は自由です。step1、2はスクレイピングの記事でhttps://blogsmile117.com/scraping/にあります)を同じフォルダに入れます。

pandasでcsvファイルを開く

stetp3-1.py
import pandas as pd
df=pd.read_csv(“test.csv”)
print(df)
実行結果
pandasモジュールをpdという名前をつけて、取り込んでいます。
pandas.read_csv(ファイルのパス/ファイル名 , 文字形式)

でcsvファイルを読み込むことができます。それをdfという変数に代入しています。

変数名dfで実行しています。

目次

CSVデータを解析する

読み込んだデータの情報を調べてみます。データの件数は、「len(df)」、項目名は「df.columns.values」、インデックスは「df.index.values」調べることができます。

step3-2.py

import pandas as pd
df=pd.read_csv(“test.csv”)
print(“データの件数=” , len(df))
print(“項目名=” , df.columns.values)
print(“インデックス=” , df.index.values)

 

列データ、行データを表示する

df[“列名”]と指定すると、その1列のデータを取得できます。複数列のデータは、df[“列名2” , “列名2”]と、リストで指定して取得します。test.csvの国語と数学の列データを表示させます。

step3-3.py

import pandas as pd
df=pd.read_csv(“test.csv”)
#1列のデータ
print(“国語の列データ\n” , df[“国語”])
#複数の列のデータを表示
print(“国語と数学の列データ\n” , df[[“国語” , “数学”]] )

行データの取得

1行のデータは、df.loc[行番号]と指定するとその1行のデータを取得できます。複数行のデータは、df.loc[[行番号1,行番号2]]と、リストで指定して取得できます。また、1つの要素は、df.loc[行番号][“列名”]と、行と列を指定することで所得できます。

test.csvのインデックス「2」行と「3」行のデータと、インデックス「2」行の「国語」の要素を表示してみましょう。

import pandas as pd
df=pd.read_csv(“test.csv”)
print(“Cのデータ\n”,df.loc[2])
print(“CとDのデータ\n”,df.loc[[2,3]])
print(“Cの国語のデータ\n” ,df.loc[2][“国語”])

列データを、行データを削除する

指定した列を削除するには、df.drop(“列名”,axis=1)、指定した行を削除するには、df.drop(行番号,axis=0)と指定します。

3-6.py

import pandas as pd
df=pd.read_csv(“test.py”)
print(“名前の列を削除\n”,df.drop(“名前”,axis=1))
print(“インデックス2を削除\n”,df.drop(2,axis=0))

必要な情報を抽出する

条件に合うデータを抽出することができます。例えば、国語の王もくが90点以上の行データを抽出したいときは、df[df[“国語”]>=90]と指定します。
国語が90点以上の行データと、数学が70点未満の行データを抽出してみます。
step3-7.py
import pandas as pd
df =df.read_csv(“test.csv”)
data_s=df[df[“国語”]>=90]
print(“国語が90点以上\n” , data_s)
data_c=df[df[“数書”]<70]
print(“数学が70点未満\n”,data_c)

データを集計する

表データを集計することができます。最大値はdf[“列名”].max()、最小値はdf[“列名”].min()、平均値はdf[“列名”].mean()、中央値はdf[“列名”].median()、合計値はdf[“列名”].sum()で求めることができます。数学の集計を表示してみます。

3-8.py

import pandas as pd
df=pd.read_csv(“test.csv”)
print(“数学の最高点=”,df[“数学”].max())
print(“数学の最低点=”,df[“数学”].min())
print(“数学の平均点=”,df[“数学”].mean())
print(“数学の中央値=”,df[“数学”].median())
print(“数学の合計=”,df[“数学”].sum())

データを並び替える

項目を指定して並び替えをすることができます。df.sort_values(“列名”)と命令します。

昇順(1、2、3……)

df=df.sort_values(“列名”)

降順

df=df.sort_values(“列名”,ascending=False)

chap3-9.py

import pandas as pd
df=pd.read_csv(“test.py”)
kokugo=df.soret_values(“国語”,ascending=Falese)
print(“国語の点数がタイアkもの順でソート\n”,kokugo)

行と列を入れ替える

表データの行と列を入れ替えることができます。例えば、DataFrameに「.T」をつけるだけで入れ替わります。またDataFrameを、Pythonで使うリストに変換することもできます。「.values」とつけるだけです。

step3-10.py
import pandas as pd
df=pd.read_csv(“test.csv”)
print(“行と列を入れ替える\”,df.T)
print(“データをリスト化する\n”,df.values)

CSVファイルに出力する

DataFrame.to_csv(ファイル名.csv”)とします。インデックスやヘッダーを削除して出力したいときには、=Falseとします。

国語の点数で並び替えて、CSVファイルに出力してみます。

3-11.py

import pandas as pd
df=pd.read_csv(“test.csv”)
kookugo=df.sort_values(“国語” , ascending=False)
kokugo.to_csv(“export1.csv”)
インデックスとヘッダーを削除して出力したい場合は、
kokugoi.to_csv(“export2.csv”,index=”False”, header=False)
とします。

グラフで表示してみる

matplotlibをインストール

データフレームの情報を取得する.info()

データフレームの統計量を取得

.describe()

roundメソッド

桁数を指定して数値を丸める

population.describe().round(0)

データフレームの作り方

リストの方を持った配列を使う

import pandas as pd

df=ps.DataFrame( [[1,2,3,],[4,5,6,),[7,8,9]],

columns=[‘col01’,’col02’,’col03’],

index=[‘idx01’,’idx02’,’idx03’])

実行

df

結果 

numpyの配列をつかう

numpyとは高速にリストの計算をするためのライブラリです。

import numpy as np

df=pd.DataFrame(np.array( [ [123],[4,5,6],[7,8,9] ] ),

columns=[‘col01’,’col02’,’col03’],

index=[‘idx01’,’idx02’,idx03’] )

df

df.indexで行を取得

df.columnsで列を取得

辞書型でフレームワーク

df=pd.DataFrame({ ‘col01’:[1,2,3],

‘col02’:[4,5,6],

‘col03’:[7,8,9]}

,index=[‘index’,’index02’,’index03’])

df

df.columns=[‘col01′,’col02′,’c0l03′]

df.index=[‘idx01′,’idx02′,’idx03′]

カラムを上書き

df.columns=[‘col04’,’col05′,’c0l06’]

renameメソッド

行名・列名を変更する

df=df.rename(columns={‘col04:’x’})
df

列をシリーズとして取得

df[‘x’]

列をデータフレーム形式で取得

df[[‘x’]]

locメソッド

行名や列名を指定して、行や列を取得

df.loc[‘W’]

列全部を取得

df.loc[:,’col01’]

カンマの前が行、後ろが列を表している。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次