0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pandasでastype()がうまく動作しないときの対処法(非常に原始的)

Last updated at Posted at 2024-08-12

astype(int) がうまくいかない

df = pd.DataFrame(data=[["81", "100", "69", "78", "95"],["70", "93", "71", "82", "89"]],columns=["A", "B", "C", "D", "E"])

時々、df.astype(int)を実行しても、dtypeがobjectのままになる。

(大抵、例えば空白や特殊文字が含まれているなど、データが純粋な数字でなく、型変換に失敗しているだけだろうが)

そんなとき、自分は以下3つを試すようにしている。

環境

python = "^3.11"
pandas = "^2.2.2"
ipython = "^8.26.0"

各列ごとに型変換を試す

データフレーム全体を一度に変換するのではなく、各列を個別に変換してみると原因が特定しやすい。以下のような処理を試して、どの列が問題を引き起こしているか確認する。

import pandas as pd

# データフレームの作成
df = pd.DataFrame(data=[["81", "100", "69", "78", "95"], ["70", "93", "71", "82", "89"]],
                  columns=["A", "B", "C", "D", "E"])

# 各列ごとに整数型へ変換を試みる
for column in df.columns:
    try:
        df[column] = df[column].astype(int)
    except ValueError as e:
        print(f"Error in column {column}: {e}")

# データ型を確認
print(df.info())

データのクリーニング

データにスペースや特殊文字が含まれている場合は、これらを取り除くためにクリーニングする。

df = df.apply(lambda x: x.str.strip())  # 余分なスペースを除去
df = df.replace('', pd.NA)  # 空文字をNAに置換
df = df.dropna()  # NAを含む行を削除

# その後、型変換を再試行
df = df.astype(int)
print(df.info())

Debugging: データの確認

print(df.applymap(lambda x: x.isdigit()))  # 数字で構成されているか確認
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?