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

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

ただいまの
回答率

91.06%

  • Python 2.7

    1067questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

  • pandas

    327questions

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

[python]pandas.seriesでindexのデータ型が変更できない件

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 92

mi_tyan

score 5

打ち込んだコード

kara_series = pd.Series([])
for p in arange(0,384):
    exec("a = manual_data_mod["+str(p)+"]")
    exec("f = after_areas[:," +str(p)+ "][a:-1]")
    obj = Series(f)
    ss = obj.value_counts()
    kara_series.add(ss, fill_value=0)

エラー文

/usr/local/bin/ipython:1: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  #!/usr/bin/python

seriesで作成したデータのindexがfloatであるため上記のエラーが出てしまうと考えられます、indexのデータ型を変える方法を探しているのですが見つからず困っております。

お手数ですがご回答のほどよろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

単純にIndexを振りなおすなら Series.reset_index()

import pandas as pd
ser = pd.Series([1.,2.,3.], index=[1.,2.,3.])

ser = ser.reset_index(drop=True)
print(ser)
# 0    1.0
# 1    2.0
# 2    3.0
# dtype: float64

Indexの型を変更したい場合はSeries.index.astype()
で良いのではないでしょうか

import pandas as pd

ser = pd.Series([1.,2.,3.], index=[1.,2.,3.])
print(ser)
# 1.0    1.0
# 2.0    2.0
# 3.0    3.0
# dtype: float64

# indexの型を確認
print(ser.index.dtype)
# float64

# indexをint型に変更
ser.index = ser.index.astype(int)

# print(ser)
# 1    1.0
# 2    2.0
# 3    3.0
# dtype: float64

# indexの型を再度確認
print(ser.index.dtype)
# int64

【補足】

コメントを見る限り、manual_data_mod と after_areas は共に、内部のデータはfloat型のになっているようです。
特に、manual_data_modはIndex値として使用しますので、 Int型に変換することで動作するのではないでしょうか。
after_areasも特に少数を扱わないのであれば変換しておいたほうがよいと思います。)

manual_data_mod = manual_data_mod.astype(int)

kara_series = pd.Series([])
for p in np.arange(0,384):
    a = manual_data_mod[p]
    f = after_areas[:,p][a:-1]
    obj = pd.Series(f)
    ss = obj.value_counts()
    kara_series = kara_series.add(ss, fill_value=0)

あと気になった点を3点ほど。

(1)

    f = after_areas[:,p][a:-1]


    f = after_areas[a:-1,p]


で問題ないのではないでしょうか。

(2)

    f = after_areas[:,p][a:-1]


は a:-1 の範囲でSliceとすると 一番最後の値が含まれませんが問題ないのでしょうか?(仕様かもしれませんが)

    f = after_areas[:,p][a:]


とするべきではないのでしょうか。
(3)

kara_series.add(ss, fill_value=0)


kara_series = kara_series.add(ss, fill_value=0)


の間違いかと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/19 11:15 編集

    回答ありがとうございます。
    上記の通りコードを以下に書き換えました

    ss.index = ss.index.astype(int)
    kara_series.index = kara_series.index.astype(int)

    補足
    In [723]: ss.index
    Out[723]: Int64Index([0], dtype='int64')

    In [724]: kara_series.index
    Out[724]: Int64Index([1], dtype='int64')

    しかし以前と変わらず同様の結果になってしまいます、、、

    キャンセル

  • 2017/12/19 11:45

    残念ながら、挙げていただいたコードだけでエラーを特定するのは困難です。
    できましたら、
    - manual_data_mod がどのような型でどんなデータが入っているのか
    - after_areas がどのような型でどんなデータが入っているのか
    - 何故、exec() を使用しているのか
    等の説明をいただけたらと思います。

    キャンセル

  • 2017/12/19 11:50

    'a' の値が float値なのではないかという気もしております。

    キャンセル

  • 2017/12/19 14:53 編集

    情報が足らずに申し訳ありません。

    In [44]: type(manual_data_mod)
    Out[44]: numpy.ndarray

    In [42]: manual_data_mod
    Out[42]:
    array([ 215., 197., 191., 173., 170., 161., 186., 203., 189.,
    224., 170., 183., 176., 151., 218., 173., 223., 211.,
    188., 170., 166., 179., 218., 194., 179., 178., 189.,])
    (一部抜粋)

    In [47]: type(after_areas)
    Out[47]: numpy.ndarray

    In [45]: after_areas
    Out[45]:
    array([[ 0., 15., 11., ..., 7., 15., 27.],
    [ 15., 16., 10., ..., 19., 4., 18.],
    [ 24., 4., 26., ..., 13., 5., 11.],])
    (一部抜粋)

    execは使う必要なかったです。
    ご指摘ありがとうございます。

    また
    a = int(a)としint型にしました。

    キャンセル

  • 2017/12/19 16:16

    とりあえず補足を追加しました

    キャンセル

  • 2017/12/19 16:20

    丁寧にありがとうございます!!
    おかげさまで解決しました!!!

    キャンセル

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

  • ただいまの回答率 91.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 2.7

    1067questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

  • pandas

    327questions

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