pandas

【pandas】applymapで一定条件を満たす列にのみ色を付ける

この記事は約3分で読めます。

 

データ準備

 

import pandas as pd 
df = pd.DataFrame({'商品ID':[1, 2, 3, 4, 5], '商品名': ["水", "炭酸水", "コーヒー", "コーラ", "ポカリ"], '平均価格': [200, 120, 250, 300, 260]})
df

 

<実行結果>

商品ID 商品名 平均価格
0 1 水 300
1 2 炭酸水 120
2 3 コーヒー 350
3 4 コーラー 300
4 6 コーラーゼロ 560

 

applymapで一定条件を満たす列にのみ色を付ける

 

# 一定の数値以上を部分に色を付ける
def color_negative_red(val):
   """ Takes a scalar and returns a string with the css property `
   'color: red'` for negative strings, black otherwise. """ 
   color = 'red' if val > 200 else 'black' 
   return 'color: %s' % color
df[['平均価格']].style.applymap(color_negative_red)

 

引数valの値に対して、200以上なら文字色を赤、それ以外は黒の色にするCSSの文字列を返しています。上で定義した関数をdf.style.applymap(関数)に入れてやれば、データフレームの全ての値に対して関数処理が行われます。

 

<実行結果>

 

よくあるエラー一覧

 

Styler object has no attribute style

 

上記の関数(style.applymap)を適用して色を付けると「pandas.io.formats.style.Styler」というdataframeとは違う別のデータ型になるので、データフレームで出来ていたメソッドが使用できなくなり上記のようなエラーが発生します。なので色付け処理は最後の最後で行った方が良いでしょう

 

‘Series’ object has no attribute ‘style’

 

applymapはデータフレームにしか適用できません。df[‘列名’].style.applymapだとエラーになります。こういった場合はsubset=[“列名A”,“列名B”]みたいな感じで関数を適用する列を指定してください

 

<イメージ例>

df.style.applymap(color_negative_red, subset=["B","C","D","E"])

 

 

‘>’ not supported between instances of ‘str’ and ‘int’

 

色付けするデータフレームに数値以外が含まれていると発生します。色付けしようとしている列に数値以外のデータが混じっていないか確認してみてください。上記のようにsubset=[“列名A”,“列名B”]みたいな感じで関数を適用する列を絞ってください。

 

終わり

 

MENTAで相談を受けたので調べてみましたが、個人的にはエクセルでできることなので多分エクセルでやった方が手っ取り早いと思います。

 

参照:https://chayarokurokuro.hatenablog.com/entry/2021/02/25/175922

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. […] 関連記事:【pandas】applymapで一定条件を満たす列にのみ色を付ける […]

タイトルとURLをコピーしました