メモ_カラムのずれたcsvをpandasに読み込んで、ズレを訂正して再保存してデータ全体をマージ

国土地理院-全国地名データ(位置参照情報)からダウンロードしてきたデータのうち、福岡県の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データと行数とも一致。大丈夫っぽい。