背景
pandas.DataFrame.assign
において、列名として文字列を指定したい場面がありました。以下のドキュメントに方法は書いてあるのですが、キーワードとして引数として入力する例のみがコード例として紹介されています。
本記事ではドキュメントと可変長引数(**kwargs
)の扱い方を参考にpandas.DataFrame.assign
において、列名として文字列を指定する方法をコードとして紹介します。
コード例
まずは対象となるデータフレームを用意します。
import pandas as pd
df = pd.DataFrame({"絵文字": ["🍎", "🦍", "📯"]})
df
絵文字 | |
---|---|
0 | 🍎 |
1 | 🦍 |
2 | 📯 |
以下、pandas.DataFrame.assign
で列名として文字列を指定する方法(コード例)です。
df.assign(**{"名前": ["リンゴ", "ゴリラ", "ラッパ"], "普通名詞": True})
絵文字 | 名前 | 普通名詞 | |
---|---|---|---|
0 | 🍎 | リンゴ | True |
1 | 🦍 | ゴリラ | True |
2 | 📯 | ラッパ | True |
補足
紹介した方法を活用すると、例えば以下のような書き換えが可能になります。
- df = pd.DataFrame({"絵文字": ["🍎", "🦍", "📯"]})
- df["名前"] = ["リンゴ", "ゴリラ", "ラッパ"]
- df["普通名詞"] = True
+ df = pd.DataFrame({
+ "絵文字": ["🍎", "🦍", "📯"]
+ }).assign(**{
+ "名前": ["リンゴ", "ゴリラ", "ラッパ"],
+ "普通名詞": True
+ })
メソッドの連結により、論理ステップ数が一つで最終的に実現したいデータフレームを生成できます。メソッドの連結は、以下のpandasのアンチパターンや良い書き方を解説した記事においても勧められています。
Instead of sequentially mutating a pandas DataFrame, a better approach is to transform it by chaining pandas methods.
引用:4 Pandas Anti-Patterns to Avoid and How to Fix Them
さらに、列名を文字列として扱う場合、変数化も可能になります。
+ column_icon = "絵文字"
+ column_name = "名前"
+ column_is_common_noun = "普通名詞"
- df = pd.DataFrame({
- column_icon: ["🍎", "🦍", "📯"]
- }).assign(**{
- column_name: ["リンゴ", "ゴリラ", "ラッパ"],
- column_is_common_noun: True
- })
+ df = pd.DataFrame({
+ "絵文字": ["🍎", "🦍", "📯"]
+ }).assign(**{
+ "名前": ["リンゴ", "ゴリラ", "ラッパ"],
+ "普通名詞": True
+ })
コード中の他の箇所で列名を扱う際に便利になります。