Pandas を使用した米国の人口データの操作

この実験の目的は、pandas ライブラリを使用することであり、pandas のファイルの読み書き、カスケード、null 値処理、クエリ文、データ処理などの機能を利用します。

1.パンダモジュールをインポートする

Pandas ライブラリは、無料のオープン ソースのサードパーティ Python ライブラリです。Python データ分析に不可欠なツールの 1 つです。Python データ分析用の高性能で使いやすいデータ構造、つまり Series と DataFrame を提供します。

pip install pandas を使用してインストールし、pandas を pd ステートメントとしてインポートしてモジュールをインポートします。

2. 人口データのダウンロード

米国の人口データは、GitHub - jakevdp/data-USstates: Collection of CSV data on US states for Pandas merge Demonsからダウンロードできます。必要なファイルは次のとおりです。

3. 人口データの処理

1. カスケードとカスケード後のデータ処理

read_csvでファイルを読み込みます。

area = pd.read_csv( 'state-areas.csv' )
abbr = pd.read_csv(
'state-abbrevs.csv' )
Pop = pd.read_csv(
'state-population.csv' )

人口ファイルと州略称ファイルを連結します。州略語列に従って、pop と abbr がマージされ、それぞれ州/地域列および略語列に従って 1 対多のマージが実行されます。すべての情報を保持するには、外部マージを使用し、left_on および right_on でマージ列を指定します。ただし、外部マージを使用すると、データは失われませんが、NULL 値が残ります。

Pop2 = pd.merge(pop , abbr , how = 'outer' , left_on = 'state/region' , right_on = 'abbreviation' )

NULL 値を表示するには info を使用します。

印刷(pop2.info())

出力は次のとおりです。

州・地域列と略称列が重複しているため、1列削除できますが、略称列はnull値となっていることが分かりますので、略称列を削除します。インプレースとは、新しいデータを作成せずに、pop2 上でデータ変更が直接行われることを意味します。

Pop2.drop(ラベル= '略語' = 1 インプレース= True )
Pop2.to_excel(
'pop2.xlsx' )

isnull().any() を使用します。特定の列にデータが欠落している場合にのみ、TRUE が表示されます。

print (pop2.isnull().any())

出力は次のとおりです。

人口列と州列の両方に NULL 値があることがわかります。人口列は入力できませんが、州名は入力できます。次に、州名を入力しましょう。
まず、state 列のどの行が null であるかを確認します。

cond = Pop2[ 'state' ].isnull()
print (cond)

出力は次のとおりです。

「USA」と「PA」の 2 つの州のみが null 値を持つことがわかります。

表に書き込んだ結果は以下の通りです。

2. NULL値処理

次に、データを入力し、データが欠落しているかどうかに応じてデータを表示し、欠落が True の場合は表示します。「州/地域」列で PR に等しいデータを探します。

cond1 = Pop2[ '州/地域' ] == 'PR'

課題を作成します。

Pop2[ '州' ][cond1] = 'プエルトリコ'

同様に、USA 列のデータを入力します。

記入後に表に書き込まれた結果は以下の通りです。

母集団の値が空であることを確認し、母集団が空の行を削除します。

cond = Pop2[ '人口' ].isnull()

Pop2.dropna( inplace = True )

ファイルに書き込む

Pop2.to_excel( 'pop3.xlsx' )

出力は次のとおりです。

空の人口データ行が削除されていることがわかります。

3. 3 つのファイルが連結され、空の値が埋め込まれます。

エリア ファイルをマージするには、左マージを使用します。

Pop4 = pd.merge(pop2 , area , how = 'outer' )

空のデータを探し続けます。

print (pop4.isnull().any())

出力は次のとおりです。

列領域(平方 mi) にデータが欠落していることがわかりました。どの行であるかを調べるには、どの状態にデータがないのかを調べる必要があります。

cond = Pop4[ '面積 (平方マイル)' ].isnull()

Pop4[cond] は、cond が true で、usa にデータがないことが判明した場合に行を出力することを意味します。

印刷(pop4[cond])

出力は次のとおりです。

 

アメリカの面積は各州の面積の合計なので、各州の面積の合計を計算できます。

sum_area = area[ '面積 (平方マイル)' ].sum()

空のデータを埋めます。空のデータは米国からのものであるため、fillna 関数を使用します。そしてファイルに書き込みます。

Pop4.fillna(sum_area , inplace = True )
Pop4.to_excel(
'pop4.xlsx' )

Pop4.xlsx ファイルは次のとおりです。

4. 人口データの処理

2010 年の全国人口データを処理することを選択します。まず、クエリ ステートメントを使用して、各州の 2010 年の人口データを検索します。

Pop_2010 = Pop4.query( "年 == 2010 および年齢 == '合計'" )

クエリ結果を処理し、州/地域列を新しい行インデックスとして使用し、ここで set_index 関数を使用します。

Pop_2010.set_index( '州/地域' , inplace = True )

「pop2010.xlsx」ファイルに書き込みます。

Pop_2010.to_excel( 'pop2010.xlsx' )

出力は次のとおりです。

人口密度を計算します。この時点で受け取ったpop_densityのタイプがSeriesであることに注意してください。

Pop_density = Pop_2010[ '人口' ]/pop_2010[ '面積 (平方マイル)' ]

このとき、pop_density はシリーズなので、結合するには DateFrame に変換する必要があります。

Pop_density = DataFrame(pop_density , columns =[ 'pop_density' ])

result = pd.merge(pop_2010 , Pop_density , left_index = True, right_index = True )

ファイルに書き込みます。

result.to_excel( 'result.xlsx' )

出力は次のとおりです。

最後に、人口密度で並べ替えます。

result.sort_values( by = 'pop_density' , inplace = True )
result.to_excel(
'result.xlsx'

おすすめ

転載: blog.csdn.net/m0_51864191/article/details/127425446