外部ライブラリpandasができること
pandasとは
関係性を持ったデータを、簡単かつ直感的、高速かつ柔軟に扱えるようになっています。多くの言語で利用可能な強力で柔軟なオープンソースのデータ分析・操作ツールになることを目標にしています。csvをはじめ、excel、html、json、xml など多くの形式に対応しています。
特徴
沢山ありますが、3点あげておきます。
詳細は、(公式)Pandas または、 (PyPi) Pandas で確認できます。
今回やってみること
仮の天気情報を作って、できそうなことをひとつずつこなしていきたいと思います。
項目4の「csvファイルにデータを変更」は、既に存在しているデータを変更、項目5の「csvファイルにデータを変更」は、新しく2025-04-03のデータを追加してみます。
csvデータ
一番目の項目「簡単なcsvファイルを作成」です。
天気に関するデータを作ってみたいと思います。(仮に作ったデータで、内容は正しくありません。)データは形式はcsvに合わせていますが、編集しやすいように拡張子をcsvではなくtxtにしてあります。
↓↓↓weather-2025.txt↓↓↓
【date】,【week】,【℃-min】,【℃-max】,【Today】,【Tomorrow】
2025-04-01,火,0.0,4.0,雨,雨のち曇り
2025-04-02,水,0.0,8.0,雨のち曇り,曇りのち晴れ
使用したメソッド一覧
動作確認の前に、今回使用したメソッドを簡単に書いておきたいと思います。
読み出し、簡単なデータ選択
データの選択
| メソッド | 説明 | 動作確認 |
| .at[ , ] | インデックス名、カラム名でセルを指定 | click |
| .iloc[ , ] | 数字で行列指定 | click |
| .loc[ , ] | インデックス名、カラム名で行列を指定 | click |
| .DataFrame( , , ) | データを作成します | click |
| .concat([ , ]) | データを連結する | click |
動作確認
Thonnyで確認していきます。
作成したcsvファイルの内容を表示
import pandas as pd
df = pd.read_csv('./weather-2025.txt', sep=',')
a = df.head(2)
print("df\n",df, '\n')
print("a\n",a)上記プログラムを実行した結果が下の画像です。結果が見やすいようにしていますが、シンプルに表示するだけなら、 print(df)、print(a) で十分です。

df も a も同じ結果が表示されているのが分かります。
a = df.head(2) を a = df.head(3) にしても、結果は変わりません。
a = df.head(1) にすると 0行目の2025-04-01だけになります。
a = df.head(0) だと、
Empty DataFrame
Columns: [【date】, 【week】, 【℃-min】, 【℃-max】, 【Today】, 【Tomorrow】]
Index: []
と、表示されました。
上手く検出できないデータ
csvデータの一部を削除して、NaNを表示させてみます。
↓↓↓weather-2025.txt(改)↓↓↓
【date】,【week】,【℃-min】,【℃-max】,【Today】,【Tomorrow】
2025-04-01,火,0.0,4.0,雨,雨のち曇り
2025-04-02,水,0.0,,雨のち曇り,曇りのち晴れ
2025-04-02の【℃-max】が、8.0 になっているのを削除しました。「,8.0,」が「,,」になっています。

1行目の2025-04-02の【℃-max】のデータがないので、NaNになっています。
| NaN | not a number、非数 |
| Na | Not Applicable、非該当、不適用 |
| NaT | Not a Time、非時間(時間に関するNaN) |
文字数を増やす
カラムの文字数を増やすとどうなるか確認します。
↓↓↓weather-2025-2.txt↓↓↓
【date】,【week】,【temperature-min】,【temperature-max】,【Today’s-weather】,【Tomorrow’s-weather】
2025-04-01,火,0.0,4.0,雨,雨のち曇り
2025-04-02,水,0.0,8.0,雨のち曇り,曇りのち晴れ
最初のプログラムの、
df = pd.read_csv(‘./weather-2025.txt‘, sep=’,’) を
df = pd.read_csv(‘./weather-2025-2.txt’, sep=’,’) に変更して確認します。
項目の内容について、単位を文字にしたり詳しくしたりしてみました。この後も、使うかもしれないのでファイル名を変えました。

文字数が多くなるとデータが省略されています。表示後に、実際のデータサイズを [2 rows x 6 columns] で示しているようです。
カラムと不一致のデータ
カラムのデータが6つに対して、データの数を増やすとどうなるか試してみました。
↓↓↓weather-2025.txt(改)↓↓↓
【date】,【week】,【℃-min】,【℃-max】,【Today】,【Tomorrow】
2025-04-01,火,0.0,4.0,雨,雨のち曇り
2025-04-02,水,0.0,8.0,雨のち曇り,曇りのち晴れ,晴れ
1行目のデータ、2025-04-02の最後に「,晴れ」を追加して動作確認すると、エラーになって処理が停止することが分かります。追加した「,晴れ」を削除すると正常に動作します。
指定の情報をピックアップ
行列を指定したデータ (ピンポイントに指定したデータ)
指定したデータをピックアップします。
import pandas as pd
df = pd.read_csv('./weather-2025.txt', index_col='【date】', sep=',')
a = df.head(2)
print(a, '\n')
print(df.at['2025-04-01', '【week】']).atを使ってインデックスとカラムを指定すると、ピックアップできます。日付(【date】)をインデックスだと定義する必要があります。(index_col=’【date】’)

全体を表示して、指定のデータをピックアップしました。2025-04-01と【week】で交わるデータの「火」がピックアップできています。
行または列を指定したデータ
.ilocを使って行と列を指定して表示することができます。
import pandas as pd
df = pd.read_csv('./weather-2025.txt', index_col='【date】', sep=',')
a = df.head(2)
print(a, '\n')
print(df.iloc[[0],:], '\n')
print(df.iloc[[1],:], '\n')
print(df.iloc[:,[0]], '\n')
print(df.iloc[:,[0,2]], '\n')
print(df.iloc[:,[0,2,4]], '\n')表示結果について解説していきます。【date】がインデックスだと認識させるために、index_col=’【date】’ を追加しています。
print(a)
※見やすいように無関係の表示情報を消しています

データ比較用として表示させました。
print(df.iloc[[0],:])
print(df.iloc[[1],:])
※見やすいように無関係の表示情報を消しています

表示する行を指定しています。0行目だけ、1行目だけが表示されています。
「:」は全選択のようです。
print(df.iloc[:,[0]])
print(df.iloc[:,[0,2]])
print(df.iloc[:,[0,2,4]])
※見やすいように無関係の表示情報を消しています

表示する列を指定しています。それぞれ、0列目だけ、0列と2列目を、0列と2列と4列目を表示させました。
print(df.iloc[0:1,0:4])
※見やすいように無関係の表示情報を消しています

上の結果はオリジナルのデータで、下の結果が今回の結果です。
表示させたい行、列をそれぞれ範囲で指定します。0行目の0~3列目のデータを範囲でしていして表示させます。終了側は表示させたい範囲+1の値を設定します。行は0:1なので0行目を、列は0:4なので0~3列目までのデータを表示させています。
他にも色々できる
数値を変えてみてどうなるかを確認すると、より理解が深まると思います。また、条件を設定して表示することもできたりと、色々な設定があるので探してみると面白いです。
例えば、インデックスとカラムを指定して表示することもできます。(.loc)
print(df.loc[[‘2025-04-01’], [‘【℃-min】’, ‘【℃-max】’]])
を追記して確認できます。
データの変更、追加
データを変更
現在、2025-04-02 -【℃-min】のデータが「0.0」。これを「0.5」に変更して再表示します。
import pandas as pd
df = pd.read_csv('./weather-2025.txt', index_col='【date】', sep=',')
a = df.head(2)
print(a, '\n')
b = df.at['2025-04-02', '【℃-min】']
print(b, '\n')
df.at['2025-04-02', '【℃-min】'] = 0.5
print(a, '\n')結構、単純でした。

df.at[‘2025-04-02’, ‘【℃-min】’] を = の左辺に置けば書き換え、右辺に置けば左辺に代入になりました。
df.iloc[1,1] でも同様の処理ができました。
【℃-min】のデータを「0.5」から「1.0」に変更します。
#上記のプログラムに追記して確認できます。
c = df.iloc[1,1]
print(c, '\n')
df.iloc[1,1] = 1.0
print(a, '\n')元のデータが「0.5」を確認して、「1.0」に変更しました。

データを確認すると、「1.0」に変更できているのが確認できます。
データを追加
2025-04-03の(架空)データを追記します。順に「水」「1.0」「8.5」「晴れ」「曇り」というデータとします。
形式を合わせた追加分だけのデータを作って、それを加える(ドッキングする)方法が簡単そうです。
import pandas as pd
df = pd.read_csv('./weather-2025.txt', index_col='【date】', sep=',')
a = df.head(2)
print(a, '\n')
df_add_data_1 = pd.DataFrame([['木', '1.0', '8.5', '晴れ', '曇り']], index = ['2025-04-03'], columns = ['【week】', '【℃-min】', '【℃-max】', '【Today】', '【Tomorrow】'])
print('「df_add_data_1」\n', df_add_data_1, '\n')
df_add_data_2 = pd.DataFrame([['木', '1.0', '8.5', '晴れ', '曇り'], ['金', '1.5', '10.0', '曇り', '晴れ']], index = ['2025-04-03', '2025-04-04'], columns = ['【week】', '【℃-min】', '【℃-max】', '【Today】', '【Tomorrow】'])
print('「df_add_data_2」\n', df_add_data_2, '\n')
df_add_linedata = pd.concat([df, df_add_data_2])
print('「New_data」\n',df_add_linedata, '\n')追加分だけのデータを「df_add_data_1」と「df_add_data_2」のふたつ作ってみました。
実際に使うデータは「df_add_data_2」で、「df_add_data_1」は確認用です。
df

確認用です。
df_add_data_1 と df_add_data_2

df_add_data_1 も df_add_data_2 も、.DataFrame でデータを直接書きながら作りましたが、見やすくすることを目的に、変数でデータを作って .DataFrame では変数を入れ込むという方法もできます。
元々のデータは、
df_add_data_2 = pd.DataFrame([['木', '1.0', '8.5', '晴れ', '曇り'], ['金', '1.5', '10.0', '曇り', '晴れ']], index = ['2025-04-03', '2025-04-04'], columns = ['【week】', '【℃-min】', '【℃-max】', '【Today】', '【Tomorrow】'])で、これと同じ結果になるのが下のプログラムです。
df_dd2_data = [['木', '1.0', '8.5', '晴れ', '曇り'], ['金', '1.5', '10.0', '曇り', '晴れ']]
df_dd2_index = ['2025-04-03', '2025-04-04']
df_dd2_col = ['【week】', '【℃-min】', '【℃-max】', '【Today】', '【Tomorrow】']
df_add_data_2 = pd.DataFrame(df_dd2_data, index = df_dd2_index, columns = df_dd2_col).DataFrame のそれぞれの項目に入るようなデータの変数を用意して、 .DataFrame の ( ) 内の項目は変数を使用しています。
df_add_data_1とdf_add_data_2を用意したのは、[ ] の使い方を確認する為です。追加するデータが1行だけの場合、[ [0行目のデータ] ] と [ ] が2重になります。[ [0行目のデータ ], [1行目のデータ ] ] となっています。1行追加と2行追加のプログラムを見比べると、分かりやすいとおもいます。
データの連結
.concat で元のデータと連結

df_add_linedata = pd.concat([df, df_add_data_2])
元々のデータ(df)と追加したいデータ(df_add_data_2)が連結できているのが分かります。
データをcsvファイルに保存
.to_csv(‘ファイル名’, index_label=’インデックス名’, sep=’,’) で簡単に保存できます。ファイルが既にある場合は上書き保存を、存在しない場合はファイルを新規作成してデータを保存します。
import pandas as pd
df = pd.read_csv('./weather-2025.txt', index_col='【date】', sep=',')
a = df.head(2)
print(a, '\n')
df_dd2_data = [['木', '1.0', '8.5', '晴れ', '曇り'], ['金', '1.5', '10.0', '曇り', '晴れ']]
df_dd2_index = ['2025-04-03', '2025-04-04']
df_dd2_col = ['【week】', '【℃-min】', '【℃-max】', '【Today】', '【Tomorrow】']
df_add_data_2 = pd.DataFrame(df_dd2_data, index = df_dd2_index, columns = df_dd2_col)
print('「df_add_data_2」\n', df_add_data_2, '\n')
df_add_linedata = pd.concat([df, df_add_data_2])
print('「New_data」\n',df_add_linedata, '\n')
df_add_linedata.to_csv('./weather-2025-3.txt', index_label='【date】', sep=',')df と df_add_data_2 のデータをドッキングしたのが df_add_linedata で、これを存在しないファイル名「weather-2025-3.txt」に保存しました。
外部ライブラリ pandas の基本的な機能の一部を学ぶことができたと思います。


コメント