質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

5767閲覧

info()が使える箇所と使えない箇所がある

Pablito

総合スコア71

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/07/29 05:28

編集2019/07/29 08:18

前提・実現したいこと

ある購買データを加工しようとしているのですが、
pd.to_datetimeで型を変えたkeyが
本当にdatetime型に変わっているかを確認するために
.info()を使って確認したいのですが、
属性エラーが起きてしまいます。
因みにデータをインポートした直後に
.info()をすると正常に作動します。

発生している問題・エラーメッセージ

AttributeError: 'Series' object has no attribute 'info'

該当のソースコード

python

1trn =pd.to_datetime(trn['date_purchase_c'], format='%Y/%m/%d') 2trn.info()

試したこと

データをインポートした直後のtrn.info()では、
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4308392 entries, 0 to 4308391
Data columns (total 39 columns):
cst_id object
date_purchase_c object
date_purchase_n int64
yymm_purchase int64
InsDate object
dhms_InsDate int64
Trn_Type object
rev int64
num int64
code int64
Item object
Sub_Item object
sex object
age_asof_purchase_cat object
St_Region object
Season object
dtypes: int64(12), object(27)
memory usage: 1.3+ GB

このように正常に作動します。

何卒宜しくお願い致します。

追記

Python

1#インポートライブラリ 2import pandas as pd 3import numpy as np 4import scipy as sp 5import matplotlib.pyplot as plt 6import matplotlib as mpl 7import datetime as dt 8import seaborn as sns 9import io 10%precision 3 11 12cst = pd.read_csv(r'G:\~~~点.csv', engine='python', 13 dtype={'cst_id':'object','yymm_entry':'object','PostNo':'object'}) 14trn = pd.read_csv(r'G:\_201502_20190602.csv', engine='python', 15 dtype={'cst_id':'object','TranLineNo':'object','Store_code':'object'}) 16 17cst.info() 18trn.info() 19cst.drop_duplicates() 20cst = cst.drop(['date_entry_n', 'birthday_n'], axis=1) 21cst.info() 22trn =pd.to_datetime(trn['date_purchase_c'], format='%Y/%m/%d') 23trn.drop_duplicates().head() 24trn_tmp = trn.copy() 25trn_tmp['date_purchase_c']=pd.datetime(trn_tmp['date_purchase_c'], 26 format='%Y/%m/%d') 27trn_tmp.info()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーの通り、Series型には.info()はありません。
pandasにはDataFrame型とSeries型を主に扱うのですが、Series型はDataFrameの1つのカラム(つまり、縦一列)に相当します。
サクッと検索してヒットした記事を添付しておきます。
僕のpandas.SeriesとDataFrameのイメージは間違っていた

さて今回の件、サクッと解決するには、Series型をDataFrame型に変えてあげれば解決します。

python

1trn =pd.to_datetime(trn['date_purchase_c'], format='%Y/%m/%d') 2pd.DataFrame({ 3 'trn': trn 4}).info()

あと、Series型でも、中身の型を確認したいだけなら、.dtypeを使えば確認できます。

python

1trn =pd.to_datetime(trn['date_purchase_c'], format='%Y/%m/%d') 2trn.dtype

また、.describe()を使えば型に合わせた記述統計が出てくるので、個人的にはこちらの方がオススメです。

python

1trn =pd.to_datetime(trn['date_purchase_c'], format='%Y/%m/%d') 2trn.describe()

投稿2019/07/29 06:03

haritoshi

総合スコア79

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Pablito

2019/07/29 06:12

ご回答ありがとうございます! なるほど!そういうことだったのですね。 私の理解が浅かったです。 アドバイス大変にありがとうございました。
Pablito

2019/07/29 06:18

アドレス頂いた通りに実行すると、 <class 'pandas.core.frame.DataFrame'> RangeIndex: 4308392 entries, 0 to 4308391 Data columns (total 1 columns): trn datetime64[ns] dtypes: datetime64[ns](1) memory usage: 32.9 MB という結果が得られました。
Pablito

2019/07/29 06:20

これは少しイメージと違います。 私としては質問にもあるような <class 'pandas.core.frame.DataFrame'> RangeIndex: 4308392 entries, 0 to 4308391 Data columns (total 39 columns): cst_id object date_purchase_c object date_purchase_n int64 yymm_purchase int64 InsDate object このような形をイメージしていました。 これは私のpd.to_datetimeの やり方が悪いのでしょうか???
haritoshi

2019/07/29 06:29

ああ、なるほど、要求が理解できました。 ``` trn_tmp = trn.copy() trn_tmp['date_purchase_c'] =pd.to_datetime(trn_tmp['date_purchase_c'], format='%Y/%m/%d') trn_tmp.info() ``` これでどうでしょう?
Pablito

2019/07/29 06:40

質問が分かりづらくてすいません。 アドバイス通りに実行してみたのですが、 KeyError: 'date_purchase_c' が起きてしまいました。。。。 時々こうした予期せぬkey errorが起きてしまいます。
haritoshi

2019/07/29 06:50

推測するに、その時点でtrnがSeries型に変わってしまっているからです。 もしjupyterを使っているなら、カーネルの初期化を行ってください。 あと、データ分析をする上でのチップスみたいなものですが、生データを入れたDataFrameは編集しないで、別の編集して良いDataFrameを作成しましょう。そうすることで、今の状態のように、「ここまで実行したはずだからこれは実行できなくなっている」等の考慮がなくなるはずです。 具体的には、カーネルの初期化をしてから下のもののみ実行してください。 df_raw = pd.read_csv等 # 生データを読み込み、このデータは移行変更しない df_tmp = df_raw.copy() # 生データを変更しないようにDataFrameをディープコピー df_tmp['date_purchase_c'] =pd.to_datetime(df_tmp['date_purchase_c'], format='%Y/%m/%d') df_tmp.info()
Pablito

2019/07/29 06:55

なるほど! 素晴らしい! 早速やってみます!
Pablito

2019/07/29 07:01

と言いつつ 初期化の仕方が分からないのですが、 ご教示願いませんか???
haritoshi

2019/07/29 07:03

jupyterであれば、 上のバーにある Kernel > Restart です。
Pablito

2019/07/29 07:04

もしくはただ単にrestartするだけですか???
Pablito

2019/07/29 07:05

あ!入れ違い すいません。 ありがとうございます!
Pablito

2019/07/29 07:25

しかし、解決には繋がりませんでした。。。
haritoshi

2019/07/29 07:49

?? 今何につまづいているかが把握できていません。 1. カーネルの初期化ができない 2. KeyError: 'date_purchase_c'がまだ出る 3. その他の別のエラーが出ている どれでしょうか?
Pablito

2019/07/29 08:02

すいません、、、、 2です。
haritoshi

2019/07/29 08:06

全てのコードの添付をお願いします。 推測ですが、上で余計な処理をしているのが原因だと思います。
Pablito

2019/07/29 08:19

コード問題のところまでを 本文に追記しました。 お手数をおかけしますが、 何卒宜しくお願い致します。
haritoshi

2019/07/29 08:21

下の2行を削除してください trn =pd.to_datetime(trn['date_purchase_c'], format='%Y/%m/%d') trn.drop_duplicates().head()
haritoshi

2019/07/29 08:23

あと、 trn_tmp['date_purchase_c']=pd.datetime(trn_tmp['date_purchase_c'], のpd.datetimeではなく、pd.to_datetimeのtypoです
Pablito

2019/07/30 01:22

確かにそうですね! ただ、今度は別の問題が起きてしまい、 そこまですらたどり着けなくなってしまいました。。。 すいません。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問