国土地理院-全国地名データ(位置参照情報)からダウンロードしてきたデータのうち、福岡県のcsvだけカラムがずれていてので、訂正して全国のデータとマージしてpandasに展開するまでの一連の作業メモ。
1. 福岡県のcsvデータのカラムずれを訂正
いったんcsv(utf-8に変換済み)をpandasに読み込んで、pandas上でdf.reindexで訂正してcsvを保存し直す。
import pandas as pd
# CSVファイルからDataFrameを読み込む
df = pd.read_csv('40_2021.csv')
# 正しい並びにしたいカラム名のリスト
correct_order = ['都道府県名','市区町村名','大字・丁目名','小字・通称名','街区符号・地番','座標系番号','X座標','Y座標','緯度','経度','住居表示フラグ','代表フラグ','更新前履歴フラグ','更新後履歴フラグ'
]
# 列の並び替えを実行
df = df.reindex(columns=correct_order)
df.info()
df.head()
# データフレームをCSVファイルとして書き出し
df.to_csv('40_2021_new.csv', index=False)
2. 全てのcsvデータをpandasに入れる
import pandas as pd
import glob
# CSVファイルのパスを取得
csv_files = glob.glob('*.csv')
# データフレームを格納するための空のリスト
dfs = []
# 各CSVファイルをデータフレームに読み込んでリストに追加
for file in csv_files:
# ファイル名からデータフレーム名を生成(例: file1.csv -> df_file1)
df_name = 'df_' + file.split('/')[-1].split('.')[0]
# CSVファイルをデータフレームとして読み込み
df = pd.read_csv(file)
# データフレームをリストに追加
dfs.append((df_name, df))
# データフレームを縦に結合
merged_df = pd.concat([df for _, df in dfs], ignore_index=True)
# 結合されたデータフレームを表示
merged_df.info()
df.infoとdf.tailで目視確認。大丈夫っぽい。
3. pandasデータフレームをバックアップする。
import pandas as pd
# バックアップファイルのパス
backup_file_path = "backup_kokudo-all-geo.pkl"
# データフレームをバイナリ形式でファイルに保存
merged_df.to_pickle(backup_file_path)
4. 念のため福岡県のデータを検索して目視確認する
import pandas as pd
def search_records(merged_df, column_name, search_string):
# 指定したカラム内の文字列を検索
mask = merged_df[column_name].str.contains(search_string, na=False)
# 対象となったレコードの情報を表示
result = merged_df[mask]
print(result)
# 検索対象のカラム名と文字列を指定して関数を呼び出し
column_to_search = '都道府県名'
search_string = '福岡県'
search_records(merged_df, column_to_search, search_string)
ちゃんと614806件、ヒットした。事前に調べていた福岡県のcsvデータと行数とも一致。大丈夫っぽい。