支給されたデータのうち特定の列だけを抜き出して使いたい、という場合に pandas を使ったのでその備忘録です。
こんなエクセルデータがあったとして、これを pandas で処理する。
以前に書いたエントリー の通りなので省略。
冒頭のエクセルのファイル ./maclist.xlsx を読み込み:
import pandas as pd
df = pd.read_excel('./maclist.xlsx')
print(df)
python3 main.py などとして実行:
id kind name price
0 mba laptop MacBook Air 98000
1 mbp laptop MacBook Pro 248000
2 mm desktop Mac mini 78000
3 im desktop iMac 154800
4 mp desktop MacPro 715000
name, price 列だけを抽出:
df2 = df[['name','price']]
print(df2)
実行結果:
name price
0 MacBook Air 98000
1 MacBook Pro 248000
2 Mac mini 78000
3 iMac 154800
4 MacPro 715000
はい、できました。
ただ、これは前回のエントリーでも試したのだが、このコードはどうも腑に落ちない。 ということで、今回は自分が腑に落ちる方法でデータフレームを作り直すコードを書き直す。
import pandas as pd
df = pd.read_excel('./maclist.xlsx')
seriesName = df['name']
nameList = seriesName.values
print(nameList)
実行結果:
['MacBook Air' 'MacBook Pro' 'Mac mini' 'iMac' 'MacPro']
df['name'] することで、name 列のオブジェクトが得られます。これは series オブジェクトになっている。 series.values することで値(のリスト)を得ることができる。
同様に price 列も処理:
serisePrice = df['price']
priceList = serisePrice.values
そして、新規データフレームを作り出す:
rowList = []
for i in range(len(nameList)):
row = {}
row['name'] = nameList[i]
row['price'] = priceList[i]
rowList.append(row)
df2 = pd.DataFrame(rowList)
print(df2)
これで完全に機能しているが、もう少し簡単にしよう。
pd.DataFrame() するときに 列名と列の値(リスト)を与える方法があった。
df2 = pd.DataFrame( data={'name': nameList, 'price': priceList} )
print(df2)
これなら腑に落ちる範囲でそこまで冗長でないコードになった。
結果としてできたコード:
import pandas as pd
df = pd.read_excel('./maclist.xlsx')
seriseName = df['name']
nameList = seriseName.values
serisePrice = df['price']
priceList = serisePrice.values
df2 = pd.DataFrame( data={'name': nameList, 'price': priceList} )
print(df2)
実行する:
name price
0 MacBook Air 98000
1 MacBook Pro 248000
2 Mac mini 78000
3 iMac 154800
4 MacPro 715000
できました。