8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?