4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[python][DataFrame]数字を結合して文字列を作る

Posted at

エラー発生

道路ネットワークのデータを使う際にリンクのIDとその両端のノードのIDをつかって新しいキーを作ろうとしたが、雰囲気で結合させてみたらエラー。

やったこと

  • DataFrameの数字の項目列を連結させて新しいKey列を作ろうとした
df_route_link["key"] = df_route_link["objectid"] + "_" + df_route_link["from_node_id"] + "_" + df_route_link["to_node_id"]

こんな感じ。でもエラー。

TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U11') dtype('<U11') dtype('<U11')

そもそも数字を文字列は単純に結合できないので、DataFrameでもできないだろうなという気はしていた。

修正後

df_route_link['key'] = df_route_link[['objectid', 'from_node_id', 'to_node_id']].apply(lambda x: '{}_{}_{}'.format(x[0], x[1], x[2]), axis=1)
df_route_link['key'] = df_route_link.apply(lambda x: '{}_{}_{}'.format(x["objectid"], x["from_node_id"], x["to_node_id"]), axis=1)

どっちもやっていることはほぼ同じ。
先に列をピックアップしてからapplyで行に対して処理するか、行で処理する際に必要な列をピックアップするか。
個人的には後者の方がわかりやすいので好み。
でも性能差があるのかどうかはわからない。先にピックアップした方が速そうな感じがしなくもない。

apply()について
https://note.nkmk.me/python-pandas-map-applymap-apply/

※引数axis=1とすると各行に対して適用されるらしい

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?