web-dev-qa-db-ja.com

pandasデータフレームのデータ型を定義された形式の文字列に変更するにはどうすればよいですか?

私はこれで髪を引き裂き始めています-だから誰かが助けてくれることを願っています。 openpyxlを使用してExcelスプレッドシートから作成されたpandas DataFrameがあります。結果のDataFrameは次のようになります。

print image_name_data
     id           image_name
0  1001  1001_mar2014_report
1  1002  1002_mar2014_report
2  1003  1003_mar2014_report

[3 rows x 2 columns]

…次のデータ型を使用します。

print image_name_data.dtypes
id            float64
image_name     object
dtype: object

問題は、id列の数字が実際には識別番号であり、文字列として扱う必要があることです。私は次を使用してid列を文字列に変換しようとしました:

image_name_data['id'] = image_name_data['id'].astype('str')

これは少しいようですが、「float64」ではなく「object」型の変数を生成します。

print image_name_data.dyptes
id            object
image_name    object
dtype: object

ただし、作成される文字列には、次のように小数点があります。

print image_name_data
       id           image_name
0  1001.0  1001_mar2014_report
1  1002.0  1002_mar2014_report
2  1003.0  1003_mar2014_report

[3 rows x 2 columns]

pandas DataFrameのfloat64列を特定の形式(この場合は '%10.0f'など)の文字列に変換するにはどうすればよいですか?

22
user1718097

問題を再現できませんが、最初に整数に変換してみましたか?

image_name_data['id'] = image_name_data['id'].astype(int).astype('str')

次に、より一般的な質問については、mapこの回答のように )を使用できます。あなたの場合:

image_name_data['id'] = image_name_data['id'].map('{:.0f}'.format)
54
exp1orer

これをリロードできる場合は、dtypes引数を使用できる場合があります。

pd.read_csv(..., dtype={'COL_NAME':'str'})
6
smishra

コメントに改行やコードブロックがないため、これを新しい回答に入れています。私はあなたがそれらのナンを空の文字列に変えたいと思っていますか?私はこれを行う素敵な方法を見つけることができませんでした、onlyい方法だけを行います:

s = pd.Series([1001.,1002.,None])
a = s.loc[s.isnull()].fillna('')
b = s.loc[s.notnull()].astype(int).astype(str)
result = pd.concat([a,b])
2
exp1orer