hirhirの日記

Pythonとデータ分析と人口知能

Python3 入門:Anaconda の Pandas にてXlsxの読込

本日は気分を変えて

PandasにてXLSの読込 拡張子はxlsxを読み込む事にします。

データセット横浜市のオープンデータを読込やすいように

英字に変換したもの←これはコツでカラムやINDEXは英字表記が良いと思う

Pandasは先日Anacondaでインストール済みのものを使用する

実行環境はやはりAnacondaでインストール済みのIPython NoteBookを使用する。

いやーAnaconda楽ですねぇ~

Anacondaのインストールは下記を参照

hirhir.hatenablog.com

では実行開始

ipython notebook

In [39]:
 
import pandas as pd
 
book = "/Users/username/PycharmProjects/testPython/mobileIT.xlsx"
sheet = "table"  # 読み込むシート名
EXL = pd.ExcelFile(book)  # xlsxOpen
Data = EXL.parse(sheet) # DataFrameとして読込
 
 
In [42]:
 
Data
 
 
Out[42]:
 town_nameins64ins1500INDShititucatv-itdslftthfwabwamobile_adder
0 sapporo 50600 500 12.6 143068 246517 946272 2159 140854 4926875
1 sendai 35204 323 6.9 50201 94748 430786 59529 2216361
2 saitama 31496 3560 10.4 443336 306795 1329499 208078 7134000
3 chiba 24681 413 337745 256844 1227046 177983 6165000
4 tokyo 537000 13000 9.3 975825 672032 3431327 1 2189966 26177000
5 kawasaki 28986 557 13 718025 405420 1970306 1 359124 9708000
6 yokohama 87672 1491 13 718025 405420 1970306 1 359124 9708000
7 sagamihara 12199 50 13 718025 405420 1970306 1 359124 9708000
8 niigata 24154 122 9.1 40885 94264 397453 7 30576 1991241
9 sizuoka 27020 157 7.9 24583 229166 728881 142 82748 3537689
10 hamamatu 21997 100 9.8
11 nagoya 84864 2173 7.9 349463 263341 1445045 237947 7548589
12 kyoto 41647 294 49918 111683 619573 87879 2585846
13 osaka 135917 2537 7.3 767967 302964 1967554 391294 9890114
14 sakai 15856 82 13.5 767967 302964 1967554 391294 9890114
15 kobe 40805 537 8.8 340654 199063 1039919 161614 5489094
16 okayama 21088 278 8.7 62989 86251 310439 439 46833 1810517
17 hiroshima 38943 33599 142853 532247 455 90844 2779323
18 kitakyusyu 20660 133 8.7 258493 212133 885219 61 138773 5187267
19 hukuoka 60226 747 6.3 258493 212133 885219 61 138773 5187267
20 kumamoto 17935 1420 7.9 32995 78507 243872 348 35677 1621006

 

ここで注意カラムに全角文字は使用しないほうがいいようだ

pandasで読み込めない。。。なにか読む方法があるかもしれないが

見つからなかった。

indexについてはdefaultにて数字を割り振った。文字列でもindex振れるようなので

今度テストしてみよう。。。

In [63]:
 
Data.index
 
 
Out[63]:
Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], dtype='int64')

単純なINDEXが取得できる

In [43]:
 
Data.columns
 
 
Out[43]:
Index(['town_name', 'ins64', 'ins1500', 'INDShititu', 'catv-it', 'dsl', 'ftth', 'fwa', 'bwa', 'mobile_adder'], dtype='object')

カラム名の取得 ここは英字が楽 日本語も読めるがkey指定などで
取り回しができなかった。

In [47]:
 
Data.town_name 
 
 
Out[47]:
0        sapporo
1         sendai
2        saitama
3          chiba
4          tokyo
5       kawasaki
6       yokohama
7     sagamihara
8        niigata
9        sizuoka
10      hamamatu
11        nagoya
12         kyoto
13         osaka
14         sakai
15          kobe
16       okayama
17     hiroshima
18    kitakyusyu
19       hukuoka
20      kumamoto
Name: town_name, dtype: object
In [58]:
 
Data.ix[0]
 
 
Out[58]:
town_name       sapporo
ins64             50600
ins1500             500
INDShititu         12.6
catv-it          143068
dsl              246517
ftth             946272
fwa                2159
bwa              140854
mobile_adder    4926875
Name: 0, dtype: object
In [59]:
 
Data.ix[0].town_name
 
 
Out[59]:
'sapporo'
In [61]:
 
Data.town_name
 
 
Out[61]:
0        sapporo
1         sendai
2        saitama
3          chiba
4          tokyo
5       kawasaki
6       yokohama
7     sagamihara
8        niigata
9        sizuoka
10      hamamatu
11        nagoya
12         kyoto
13         osaka
14         sakai
15          kobe
16       okayama
17     hiroshima
18    kitakyusyu
19       hukuoka
20      kumamoto
Name: town_name, dtype: object
In [62]:
 
Data.town_name[0]
 
 
Out[62]:
'sapporo'

列と行と単一セルの取得をしてみた
思ってたより楽でJavaのPOIあたりで書くより非常に楽だと
しかし実はこれ以前に1000万行ほどのデータ・セットを
読み込んで見たけどPCが固まった。。。。
大量データは厳しいのかなぁ。。。
うーーーん検討の余地あり!!

 

結論

 

 PythonでXlsを読み込む方法は複数あるみたいだが

pandasは非常に楽

欠点は日本語が読みにくい事か、、、

まぁそこら辺は置き換えればいいけど

うちの会社のデータの置き換え面倒くさいなぁ

日本語のままでDataFrame扱いたいができるのかしら。。。。

参考図書