7
14

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-01-08

データの集計や加工で使うリスト
ふとした時に更新していく予定

pandasをインポート

デフォでpandasはpd, data frameはdfにしてる

import pandas as pd

データフレームを最初から作る

ランダム値から入る使用はネットに色々載ってるが、空の状態から追加していきたい時が多々ある

cnt = 100 # レコード数
df = pd.DataFrame(index=[i for i in range(cnt)], columns=['column_name'], data=0)

# レコード数が分からない時
df = pd.DataFrame(index=[0], columns=['column_name'], data=0)

# その後で分かった時
cnt = 100
df = df.reindex([i for i in range(cnt)])

# 一個追加の時
# atが速い https://github.com/pandas-dev/pandas/issues/6683#issuecomment-38305770
df.at[max(df.index)+1, 'column_name'] = 0
df.loc[max(df.index)+1, 'column_name'] = 0

何かしらのデータをpandasで読み込む

# csv
# encoding指定する場合、大抵'utf-8', 'cp932', 'utf-8-sig'で落ち着く
df = pd.read_csv('filename.csv', encoding='utf-8', dtype={'column_a': str, 'column_b': int})

# DB(mysql)
import pymysql
con = (
    host='hostname',
    user='user',
    password='password',
    db='dbname',
    charset='utf-8'
)
df = pd.read_sql(con, 'select * from table')

# Excel
# sheetnameとconvertersはオプション
df = pd.read_excel('filename.xlsx', sheetname='Sheet1', converters={'column_a': str})

カラムを追加したい時

# 例: 'add_column_name'というカラムを追加し、値にhogeを入れる
df['add_column_name'] = 'hoge'

# 例: 年齢層を年齢から取得
bins = list(range(0, 101, 10)) + [999]
labels = ['10歳未満'] + ["%d0代" % i for i in range(1, 10)] + ['100歳以上 私は元気です!']
df['age_segment'] = pd.cut(df['age'], bins, False, labels)

置換

df['phone_number'].replace('-', '', inplace=True)

# 辞書から取得も可能
df['pref'].replace(dict, inplace=True)

文字を正規化

import jaconv


def normalize(s):
    s = str(s)
    s = jaconv.hira2kata(s)
    s = jaconv.z2h(s)
    s = s.lower()
    return s

df['norm_user_name'] = df['user_name'].apply(normalize)

特定の値を変更する

# 例: 年齢が若くて名前に魚がつく人のカテゴリを変更
df['category'] = None
df.loc[(df['age_segment'] == '10代') &
       (df['user_name'].str.contains('')), 'category'] = 'ギョギョギョ'

DataFrameを1行ずつ読み込む

# tupleが速い
for row in df.itertuples():
   pass # 処理

# 遅い
for row in df.iterrows():
   pass # 処理

データを他のフォーマット(形式)にする

df['user_name'].tolist() # リストの場合、カラム名は必ず指定すること
df.to_dict()             # 辞書

# ファイルに吐き出す. indexはオプション
df.to_json('filename.csv', index=False)  # json
df.to_csv('filename.csv')                # csv
df.to_excel('filename.xlsx')             # エクセル
df.to_html()                             # html
7
14
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
7
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?