目次
3. 名詞説明「データアライメント」(chatGPT3.5より)
1) データフレーム タイプ データをデータフレーム タイプ データと位置合わせします (NAME 列を位置合わせします)。
データ整列後のデータセット (pandas.merge() 関数によって整列):
2) データフレーム タイプのデータと geopandas タイプのデータの位置合わせ (STATE_NAME フィールドの位置合わせ)。
データ配置前の 2 つのデータ セット (どちらのデータ セットにも多くの行があり、ここではその一部のみがインターセプトされています):
データの配置後、一連の geopandas タイプのデータが取得されます。
0. 環境
Windows + jupyter ノートブック + Python + パンダ
1. 適用可能なシナリオ
地理データを視覚化するプロセスでこの要件に遭遇しました。データフレーム タイプのデータセット(データセット A) とジオパンダ タイプのデータセット(データセット B) があります。[ゾーン統計マップ] を描画するには、これら 2 つのデータを使用する必要があります。タイトルの要件は、「PySal データを使用して、2009 年の米国の各州の一人当たり所得を説明する米国のゾーン統計パスを作成する」です。しかし、データを直接使用する過程で、2 つのデータ セットを見つけました。データを整列できません(データ整列の概念については次の段落で詳しく説明します)。データが整列していない場合、視覚化の結果は間違ったものになります。たとえば、両方のデータ セットに NAME という名前の列がありますが、 2 つのデータセットの NAME 列の順序は異なります。データセット A の NAME 列の順序は [name1, name3, name2] となり、データセット B の NAME 列の順序は [name3, name1] になります。 、name2]、および他の対応する行のデータも続く必要があります。現時点では、データ視覚化に 2 つのデータ セットを直接使用することはできません。これにより、name1 に属さないデータが name1 に挿入され、最終的な行でエラーが発生する可能性があります。可視化した結果。この問題を解決するために、データ整列 (merge() メソッドを使用) を使用して 2 つのデータセットを 1 つのデータセット (geopandas タイプ) に整列させます。
2. pandas.merge()関数の詳細な紹介
merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy= True、インジケーター = False、検証 = なし)
公式ドキュメントでは、merge() の役割を紹介しています: データフレームまたは名前付きシリーズをデータベース スタイルの接続でマージします。
3. 名詞説明「データアライメント」(chatGPT3.5より)
データ配置は重要なデータ処理技術であり、同じインデックスまたは列名でデータが一致することを確認できるため、データ処理操作が簡素化され、データ分析の精度と信頼性が向上します。
データ配置とは、データ処理中に、異なるデータ セットまたは異なるインデックスのデータを同じインデックスに従って照合および配置する操作を指します。これは、データの比較、結合、計算などの操作を容易にすることを目的としています。
複数のデータセットまたは複数の DataFrame オブジェクトがある場合、それらは異なるインデックスまたは列名を持つ可能性があります。データ配置のプロセスでは、インデックスまたは列名を配置することで、データが同じ位置で一致することを確認できます。これにより、データ間の不一致や欠損値がなくなり、データ処理がより便利かつ正確になります。
データの位置合わせのプロセスで、2 つのデータセットのインデックスまたは列名が正確に一致しない場合、位置合わせは自動的に実行され、欠損値は欠損値 (NaN やなど) として埋められます。なし)。このようにして、データ操作を実行するときに各データ ポイントが対応する値を持つことを保証し、データの不一致によって引き起こされるエラーや結果の逸脱を回避できます。
4. この記事では、データ配置の 2 つの例を示します。
1)データフレームタイプ データとデータフレームタイプ データのアライメント (アライメント NAME 列)。
-
データ配置前の2 つのデータ セット:
-
データ整列後のデータセット(pandas.merge() 関数によって整列):
NAME フィールドから 2 つのデータセット A と B が位置合わせされていることがわかります。
-
コード
import pandas as pd
# 创建第一个DataFrame
data1 = {'ID': [1, 2, 3],
'NAME': ['Alice', 'Bob', 'Charlie'],
'AGE': [25, 30, 35]}
df1 = pd.DataFrame(data1)
print(df1)
print("\n")
# 创建第二个DataFrame
data2 = {'ID': [1, 2, 3],
'NAME': ['Bob', 'Charlie', 'Alice'],
'CITY': ['New York', 'London', 'Paris']}
df2 = pd.DataFrame(data2)
print(df2)
print("\n")
# 使用merge方法对齐两个DataFrame的'NAME'列
merged_df = pd.merge(df1, df2, on='NAME')
# 打印对齐后的DataFrame
print(merged_df)
2)データフレームタイプのデータとgeopandasタイプのデータの位置合わせ (STATE_NAME フィールドの位置合わせ)。
-
データ配置前の2 つのデータセット(両方のデータ セットには多くの行があり、ここではその一部のみがインターセプトされています):
-
データの配置後、一連の geopandas タイプのデータが取得されます。
STATE_NAME フィールドを介して、2 つのデータ セットが geopandas タイプのデータ セットに結合されていることがわかります。具体的には、2 つのデータ セットのすべての列が STATE_NAME フィールドに従って並べ替えられ、1 つのデータ セットに統合されます。多くの行と列。1 つのインターフェイスでは表示できません。ここでは一部のみがインターセプトされます
-
コード
注: コードを実行する前に、pysal、geopandas、libpysal などの対応するモジュールをインストールする必要があります。pip install XXX コマンドを使用して、[Anaconda プロンプト] でダウンロードできます。
具体的なダウンロード プロセスについては、次のブログを参照してください。
import pysal as ps
import geopandas as gpd
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# your code here
from libpysal import examples
#2009年的人均收入数据
income_data = examples.get_path('usjoin.csv')
#用pandas读数据
usincome = pd.read_csv(income_data)
#重命名dataframe数据(usincome)的Name列
usincome.rename(columns={'Name':'STATE_NAME'}, inplace=True)
# print(type(usincome))
print("对齐前dataframe类型数据:\n")
print(usincome)
#48个州的形状
us_states = examples.get_path('us48.shp')
us48 = gpd.read_file(us_states )
# print(type(us48))
print("\n对齐前geopandas类型数据:\n")
print(us48)
#数据对齐 STATE_NAME
merged_gdf = us48.merge(usincome, on='STATE_NAME')
# print(type(merged_gdf))
print("\n对齐后geopandas类型数据:\n")
print(merged_gdf)
参考:
(35 メッセージ) Python pandas.merge() 関数の詳細説明_python でのマージ関数の使用法_Late whale のブログ - CSDN ブログpandas データマージ 1 つの記事 pd.merge() を理解する - Zhihu (zhihu.com) (35 メッセージ) メッセージ) 詳細説明Python pandas.merge() の関数_Python でのマージ関数の使用法_Late whale のブログ - CSDN ブログ
- 終わり -