LoginSignup
8
11

More than 5 years have passed since last update.

pandasとエクセルの対応表(随時更新)

Last updated at Posted at 2018-11-14

更新(2018/11/21)
- フィルターに文字列を追加


pandasの勉強を始めたばかりなのですが、下記を見た時にPyCon JP 2018 Tutorial の「Pythonを用いたデータ分析入門」で
「エクセルで出来ることは全部Pandasでできる」
と言われたのを思い出したのを機に作ってみました
自分がよく使うものを中心に基本的なものばかりです

SQL と Pandas の対応表
https://qiita.com/takaiyuk/items/5232442eaeb01299b265

準備

使用データ

下記のデータを使います

総務省統計局
https://www.stat.go.jp/data/nihon/02.html

第2章 人口・世帯
2- 2 都道府県別人口と人口増減率(エクセル:34KB)
https://www.stat.go.jp/data/nihon/zuhyou/n180200200.xls

ちょっと加工

エクセルを開いて北海道~沖縄以外の行を消してcsvで保存します
(ファイル名はn180200200.csvとします)
※xlrdのインストールをしていません

データの説明

北海道から沖縄までの人口データのファイルです
項目は下記となっています

No 項目
0 A列 都道府県名
1 B列 平成22年人口(千人)
2 C列 平成27年人口(千人)
3 D列 人口集中地区
4 E列 人口密度
5 F列 人口増減率(平成22~27年)
6 G列 平成28年推計総人口
7 H列 平成28年推計人口性比(女性100に対する男性)
8 I列 平成28年推計人口増減率(対前年)(人口1,000につき)

使用環境

python3.5
jupyter notebook

基本的なもの

並べ替え

  • 平成27年の人口の多い順に並べ替え
エクセルの場合
「n180200200.xls」の10行~56行を選択
→リボンの「データ」押下
→並べ替え押下
→優先されるキーで「列B」と「降順」を選択
→OKを押下
pandasの場合
import pandas as pd
df=pd.read_csv("n180200200.csv", encoding="shift-jis", header=None)
#カンマを削除
df[2]=df[2].str.replace(',', '')
#型変換しないと文字列でソートされます
df[2]=df[2].astype('int')
df.sort_values(2,ascending=False)

実行結果
- 0 1 2 3 4 5 6 7 8
12 東京 13,159 13515 13,295 6,168.7 2.7 13,624 97.2 8.0
13 神奈川 9,048 9126 8,616 3,777.7 0.9 9,145 99.7 2.0
26 大阪 8,865 8839 8,456 4,639.8 -0.3 8,833 92.7 -0.8
22 愛知 7,411 7483 5,802 1,446.7 1.0 7,507 100.1 3.2
10 埼玉 7,195 7267 5,828 1,913.4 1.0 7,289 99.7 3.2
11 千葉 6,216 6223 4,622 1,206.5 0.1 6,236 98.8 2.1
27 兵庫 5,588 5535 4,299 658.8 -1.0 5,520 91.2 -2.7
0 北海道 5,506 5382 4,047 a)68.6 -2.3 5,352 89.1 -5.6

・・・

フィルタ

数値フィルタ

  • 人口密度が1000人以上を抽出
エクセルの場合
E9を選択
→「データ」リボンの「フィルター」押下
→フィルタで「数値フィルター」
→「指定の値以上」を選択
→1000を入力
→OKを押下
pandasの場合
import pandas as pd
df=pd.read_csv("n180200200.csv",header=None,encoding='shift-jis')
#カンマを削除
df[4]=df[4].str.replace(',','')
#先頭から数字以外で始まる文字を削除
df[4]=df[4].str.replace('^[^1-9]+','')
df[4]=df[4].astype('float')
df.loc[df[4] > 1000]

※エクセルでは文字列がユーザ書式になっていました

実行結果
- 0 1 2 3 4 5 6 7 8
10 埼玉 7,195 7,267 5,828 1913.4 1.0 7,289 99.7 3.2
11 千葉 6,216 6,223 4,622 1206.5 0.1 6,236 98.8 2.1
12 東京 13,159 13,515 13,295 6168.7 2.7 13,624 97.2 8.0
13 神奈川 9,048 9,126 8,616 3777.7 0.9 9,145 99.7 2.0
22 愛知 7,411 7,483 5,802 1446.7 1.0 7,507 100.1 3.2
26 大阪 8,865 8,839 8,456 4639.8 -0.3 8,833 92.7 -0.8
39 福岡 5,072 5,102 3,693 1023.1 0.6 5,104 89.6 0.6

文字列フィルタ

  • 名前に山の漢字がある都道府県を抽出
エクセルの場合
A9を選択
→「データ」リボンの「フィルター」押下
→フィルタで検索ボックスに「山」を入力
→OKを押下
pandasの場合
import pandas as pd
df=pd.read_csv("n180200200.csv",header=None,encoding='shift-jis')
df.loc[df[0].str.contains('山')]

実行結果
- 0 1 2 3 4 5 6 7 8
5 山形 1,169 1,124 491 120.5 -3.9 1,113 92.7 -9.6
15 富山 1,093 1,066 403 251.0 -2.5 1,061 93.7 -4.7
18 山梨 863 835 261 187.0 -3.3 830 95.8 -6.3
29 和歌山 1,002 964 359 203.9 -3.9 954 88.8 -9.9
32 岡山 1,945 1,922 897 270.1 -1.2 1,915 92.3 -3.6
34 山口 1,451 1,405 691 229.8 -3.2 1,394 90.0 -7.4

関数

sum

  • B60に平成22年の都道府県の人口を合計
エクセルの場合
B60を選択する
→=sum(B10:B56)を入力
pandasの場合
import pandas as pd
df=pd.read_csv("n180200200.csv",header=None,encoding='shift-jis')
#カンマを削除、型変換
df[1]=df[1].str.replace(',','')
df[1]=df[1].astype('int')
df[1].sum()

実行結果

128054

average

  • B60に平成22年の都道府県の人口を平均する
エクセルの場合
B60を選択する
→=average(B10:B56)を入力
pandasの場合
import pandas as pd
df=pd.read_csv("n180200200.csv",header=None,encoding='shift-jis')
#カンマを削除、型変換
df[1]=df[1].str.replace(',','')
df[1]=df[1].astype('int')
df[1].mean()

実行結果

2724.553191489362

max

  • F60に人口増減率(平成22~27年)の最大
エクセルの場合
F60を選択する
→=max(F10:F56)を入力
pandasの場合
import pandas as pd
df=pd.read_csv("n180200200.csv",header=None,encoding='shift-jis')
df[5]=df[5].astype('float')
df[5].max()

実行結果

2.9

min

  • F60に人口増減率(平成22~27年)の最小
エクセルの場合
F60を選択する
→=min(F10:F56)を入力
pandasの場合
import pandas as pd
df=pd.read_csv("n180200200.csv",header=None,encoding='shift-jis')
df[5]=df[5].astype('float')
df[5].min()

実行結果

-5.8

countif

  • A60に山の字の入った都道府県の個数を数える
エクセルの場合
A60を選択する
→=COUNTIF(A10:A56,"*山*")を入力
pandasの場合
import pandas as pd
df=pd.read_csv("n180200200.csv",header=None,encoding='shift-jis')
df[0].str.contains('山').sum()

実行結果

6

sumif

  • G60に山の字の入った都道府県の平成28年推計総人口の合計
エクセルの場合
G60を選択する
→=SUMIF(A10:A56,"*山*",G10:G56)を入力

pandasの場合
import pandas as pd
df=pd.read_csv("n180200200.csv",header=None,encoding='shift-jis')
df[6]=df[6].str.replace(',','')
df[6]=df[6].astype('int')
(df.loc[df[0].str.contains('山')])[6].sum()

実行結果

7267

if

  • 22年と27年の人口を比べて27年が増えていたら、J列に"○"を表示する
エクセルの場合
J10を選択する
→=if(B10<C10,"○","")を入力
→J56までコピーする
pandasの場合
import pandas as pd
df=pd.read_csv("n180200200.csv",header=None,encoding='shift-jis')
df[1]=df[1].str.replace(',','')
df[1]=df[1].astype('int')
df[2]=df[2].str.replace(',','')
df[2]=df[2].astype('int')
df[9]=""
df.loc[df[1]<df[2],9]="○"
df

実行結果
- 0 1 2 3 4 5 6 7 8 9
0 北海道 5506 5382 4,047 a)68.6 -2.3 5,352 89.1 -5.6
1 青森 1373 1308 610 135.6 -4.7 1,293 88.6 -11.3
2 岩手 1330 1280 408 83.8 -3.8 1,268 92.8 -9.1
3 宮城 2348 2334 1,495 320.5 -0.6 2,330 95.6 -1.6
4 秋田 1086 1023 358 87.9 -5.8 1,010 88.5 -13.0
5 山形 1169 1124 491 120.5 -3.9 1,113 92.7 -9.6
6 福島 2029 1914 816 138.9 -5.7 1,901 97.9 -6.9
7 茨城 2970 2917 1,113 478.4 -1.8 2,905 99.4 -4.2
8 栃木 2008 1974 892 308.1 -1.7 1,966 98.9 -4.2
9 群馬 2008 1973 788 310.1 -1.7 1,967 97.5 -3.0
10 埼玉 7195 7267 5,828 1,913.4 1.0 7,289 99.7 3.2
11 千葉 6216 6223 4,622 1,206.5 0.1 6,236 98.8 2.1
12 東京 13159 13515 13,295 6,168.7 2.7 13,624 97.2 8.0
13 神奈川 9048 9126 8,616 3,777.7 0.9 9,145 99.7 2.0
14 新潟 2374 2304 1,121 183.1 -3.0 2,286 93.9 -8.0
15 富山 1093 1066 403 251.0 -2.5 1,061 93.7 -4.7
16 石川 1170 1154 594 275.7 -1.3 1,151 93.9 -2.7
17 福井 806 787 346 187.7 -2.4 782 94.2 -5.5
18 山梨 863 835 261 187.0 -3.3 830 95.8 -6.3
19 長野 2152 2099 719 154.8 -2.5 2,088 95.0 -5.1
20 岐阜 2081 2032 776 191.3 -2.3 2,022 93.9 -4.9
21 静岡 3765 3700 2,216 475.8 -1.7 3,688 96.9 -3.4
22 愛知 7411 7483 5,802 1,446.7 1.0 7,507 100.1 3.2
23 三重 1855 1816 789 314.5 -2.1 1,808 94.9 -4.2
24 滋賀 1411 1413 702 351.7 0.2 1,413 97.3 -0.1
25 京都 2636 2610 2,181 566.0 -1.0 2,605 91.7 -1.9
26 大阪 8865 8839 8,456 4,639.8 -0.3 8,833 92.7 -0.8
27 兵庫 5588 5535 4,299 658.8 -1.0 5,520 91.2 -2.7
28 奈良 1401 1364 884 369.6 -2.6 1,356 89.2 -5.9
29 和歌山 1002 964 359 203.9 -3.9 954 88.8 -9.9
30 鳥取 589 573 212 163.5 -2.6 570 91.3 -6.8
31 島根 717 694 168 103.5 -3.2 690 92.5 -6.4
32 岡山 1945 1922 897 270.1 -1.2 1,915 92.3 -3.6
33 広島 2861 2844 1,834 335.4 -0.6 2,837 94.0 -2.3
34 山口 1451 1405 691 229.8 -3.2 1,394 90.0 -7.4
35 徳島 785 756 247 182.3 -3.8 750 91.0 -7.4
36 香川 996 976 318 520.2 -2.0 972 93.8 -4.3
37 愛媛 1431 1385 733 244.1 -3.2 1,375 89.6 -7.5
38 高知 764 728 317 102.5 -4.7 721 88.9 -10.0
39 福岡 5072 5102 3,693 1,023.1 0.6 5,104 89.6 0.6
40 佐賀 850 833 262 341.2 -2.0 828 89.5 -5.4
41 長崎 1427 1377 661 333.3 -3.5 1,367 88.6 -7.5
42 熊本 1817 1786 854 241.1 -1.7 1,774 89.1 -6.7
43 大分 1197 1166 551 183.9 -2.5 1,160 89.9 -5.7
44 宮崎 1135 1104 509 142.7 -2.7 1,096 88.8 -7.2
45 鹿児島 1706 1648 663 179.4 -3.4 1,637 88.4 -6.6
46 沖縄 1393 1434 972 628.4 2.9 1,439 96.7 4.0

参考

pandasのDataFrameのデータ操作をよくわすれるので、よく使用する操作を自分のためにまとめた
https://qiita.com/kakiuchis/items/46ff158295686c0c71cf

pythonのdataframe カラム毎にまるごと型変換
https://qiita.com/nkam/items/e6e0feca70fda8fec2b1

pandasの文字列メソッドで置換や空白削除などの処理を行う
https://note.nkmk.me/python-pandas-str-replace-strip-etc/

Pandasで不要な文字を取り除いたり置換する方法まとめ
https://deepage.net/features/pandas-str-replace.html

Markdown記法 チートシート
https://qiita.com/Qiita/items/c686397e4a0f4f11683d

Python Pandasでのデータ操作の初歩まとめ − 後半:データ集計編
https://qiita.com/hik0107/items/0ae69131e5317b62c3b7

Pandasでデータ集計をする際に最低限覚えておきたいメソッド
https://qiita.com/kyo-bad/items/f5ddb7e4b8e7ad9103c5

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11