Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pd.read_sqlでの顧客データフレーム(df_customer)読み込み時のbirth_dayの型指定 #6

Closed
hyga2c opened this issue Jun 28, 2020 · 2 comments

Comments

@hyga2c
Copy link

hyga2c commented Jun 28, 2020

現在の読み込みではbirth_dayがstrで読み込まれています。(Rではdate形式になっている)
このため、P-045の回答ではpd.to_datetimeでdatetime形式に変換後、再度.dtで文字列に変換されています。
問題の意図にそったDataFrameにするためにも読み込み時にbirth_dayをparse_dates指定でdtype='datetime64'として読み出した方がよいのではないですか?

df_customer = pd.read_sql(sql='select * from customer', con=conn, parse_dates={'birth_day'})

これによりP-045は下記で回答でき、問題の意図に沿ったものになると考えます。

pd.concat([df_customer['customer_id'], df_customer['birth_day'].dt.strftime('%Y%m%d')], axis =1).head(10)

@KazuhiroM
Copy link
Contributor

KazuhiroM commented Jun 28, 2020

Issueありがとうございます。単純に読み込んだ状態をスタート地点として、そこから必要となる様々な手間を駆使することも狙って作っております。birth_dayについては、「datetime.date」で取り込まれているかと思います。このdatetime.datetimeのようでちょっと違うdatetime.dateに対し、to_datetimeを使うとdatetimeのようにstrftime使えるよ、ということをあえて問いています。実務の分析やシステム開発のコードでは、ご指摘のように入り口で指定し、全体をシンプルにするのが良いかと思いますが、ここでは100本ノックという性質上、コード毎の手間(to_datetimeなど)を含め訓練として残してありますので、その点ご了承いただければと思います。

実他Issueでも皆さんにシェアすべき知見などいただいておりますので、「こういったやり方があるよ」というWikiを今後整備していこうと考えています。本件のparse_dates={'birth_day'})は、実務においてとても役立つ知識だと思いますので、設問ファイルや解答例ファイルに修正をかけるのではなくそちらの掲載させていただく形で紹介させていただくかもしれません。

どうぞよろしくお願いします。

@KazuhiroM KazuhiroM pinned this issue Jun 29, 2020
@KazuhiroM
Copy link
Contributor

Wikiネタとしてピン留めし、Issueとしては一旦クローズ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants