前提・実現したいこと
日付と数字が混在する表の、数字部分だけに、3桁ごとに仕切りをつける「,(カンマ)」、あるいは小数点の何桁かで四捨五入をするようにしたいです。
困っていること、及び該当のソースコード
ベースとなるのは、以下のようなCSVから読み込んだものを、pd.read_sql_queryを使用してDataFrameに格納したものです。
これに対して、以下のようにして書式を適用して「,(カンマ)」を付けようとしたのですが、
Python
1df.applymap('{:,}'.format)
以下のようなエラーが発生してしまいました。
Python
1--------------------------------------------------------------------------- 2ValueError Traceback (most recent call last) 3<ipython-input-15-4735cd74c36b> in <module>() 4----> 1 df.applymap('{:,}'.format) 5 6/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in applymap(self, func) 7 5066 return lib.map_infer(x.asobject, func) 8 5067 9-> 5068 return self.apply(infer) 10 5069 11 5070 # ---------------------------------------------------------------------- 12 13/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in apply(self, func, axis, broadcast, raw, reduce, args, **kwds) 14 4875 f, axis, 15 4876 reduce=reduce, 16-> 4877 ignore_failures=ignore_failures) 17 4878 else: 18 4879 return self._apply_broadcast(f, axis) 19 20/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in _apply_standard(self, func, axis, ignore_failures, reduce) 21 4971 try: 22 4972 for i, v in enumerate(series_gen): 23-> 4973 results[i] = func(v) 24 4974 keys.append(v.name) 25 4975 except Exception as e: 26 27/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in infer(x) 28 5064 if x.empty: 29 5065 return lib.map_infer(x, func) 30-> 5066 return lib.map_infer(x.asobject, func) 31 5067 32 5068 return self.apply(infer) 33 34pandas/_libs/src/inference.pyx in pandas._libs.lib.map_infer() 35 36ValueError: ("Cannot specify ',' with 's'.", 'occurred at index date')
これを、たとえば
・date以外の数字には3桁ごとに仕切りをつける「,(カンマ)」つけて小数点は非表示
・ただし、histは小数点第3位を四捨五入(小数点第2位まで表示)
とするにはどのような方法がありますでしょうか?
小数点もformatで同様にできると思うのですが、場合分けで適用するやり方が分からず、困ってしまいました。アドバイスいただけると助かります。よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー