私はこれで髪を引き裂き始めています-だから誰かが助けてくれることを願っています。 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'など)の文字列に変換するにはどうすればよいですか?
問題を再現できませんが、最初に整数に変換してみましたか?
image_name_data['id'] = image_name_data['id'].astype(int).astype('str')
次に、より一般的な質問については、map
( この回答のように )を使用できます。あなたの場合:
image_name_data['id'] = image_name_data['id'].map('{:.0f}'.format)
これをリロードできる場合は、dtypes引数を使用できる場合があります。
pd.read_csv(..., dtype={'COL_NAME':'str'})
コメントに改行やコードブロックがないため、これを新しい回答に入れています。私はあなたがそれらのナンを空の文字列に変えたいと思っていますか?私はこれを行う素敵な方法を見つけることができませんでした、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])