2017-05-21 2 views
1

は私が例をあげてみようこの条件を満たす行は1行だけです。あなたが見ることができるようにパンダDATAFRAME /シリーズ値の書式設定の問題

df1 = df.loc[df['a'] == 0] 
print(df1) 
    a b 
0 0 1 
type(df1) 
pandas.core.frame.DataFrame 

df2 = df.loc[0] 
print(df2) 
a 0 
b 1 
Name: 0, dtype: int32 
type(df2) 
pandas.core.series.Series 

df1DataFrameインスタンスですが、df1は一列のみを有するがdf2は、Seriesです。

print('{:.2f}'.format(df1['a'])) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-92-62c2a3e8dbc0> in <module>() 
----> 1 print('{:.2f}'.format(df1['a'])) 

TypeError: unsupported format string passed to Series.__format__ 

それはdf2の値を印刷するには大丈夫だ:私はdf1の値をフォーマットしようとすると、

今、問題が発生します。

print('{:.2f}'.format(df2['a'])) 
0.00 

私はdf1DataFrameあるからだということを理解し、df1['a']Seriesだろうが、format()関数に渡される引数がSeriesオブジェクト以外 他の何かを期待しています。だから、私はこの厄介なことを回避しようとしました:

print('{:.2f}'.format(df1['a'].values[0])) 
0.00 

もっと効率的でpythnoicはここにありますか?

+0

あなたは文字列としてすべての値をフォーマットしようとしていますか?またはフロートに変換?ありがとう。 –

答えて

0

あなたはstrにデータ型を変更したい場合は、あなたが使用することができます。

df = df[df['a'] == 0].astype(str) 

結果print(df)

a b 
0 0 1 

データ型print(df.dtypes)

a object 
b object 
dtype: object 

私はあなたは、文字列の書式を適用したいfは、あなたが使用することができます。

df = df[df['a'] == 0].applymap('{:,.2f}'.format) 

結果print(df)

 a  b 
0 0.00 1.00 

データ型print(df.dtypes)

a object 
b object 
dtype: object 

次の解決策は変わらないがデータ。

pattern = '{:,.2f}'.format 
print df.to_string(formatters={'a': pattern, 'b': pattern}) 

出力:

 a b 
0 0.00 1.00 
1 2.00 3.00 
2 4.00 5.00 
+0

2つの10進数で数値を出力したい別のデータフレームから、選択した1行のデータフレームをいくつか選択しています。 dtypeを変更するつもりはありません。 – StayFoolish

+0

@StayFoolish、私はdtypesを変更しない3番目のバージョンを追加しました。 –