2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pandasの利用時に詰まった箇所

Last updated at Posted at 2025-02-11

はじめに

Pythonにおける、Pandasライブラリを利用したデータ変換を行う際に
詰まった箇所を戒めも兼ねてまとめました。

Seriesにおける値の結合

Seriesの要素に対して値を結合しようとした際ですが、
対象Seriesの値がNaNの箇所は結合されません。
有効な文字列を持っている行に対してのみ結合が行われます。

# 空のdfAに対して、一部の箇所の値がNaNであるdfBを代入
dfA["列名"] = dfB["列名"]

# 値がNaNの箇所は、要素どうしのの結合が行われない
dfA["列名"] = dfA["列名"] + dfC["列名"] 

対処法

「.fillna("")」を利用し、NaNを空文字にする

# dfBに含まれているNaNを空文字に変換する
dfA["列名"] = dfB["列名"].fillna("")

# NaNが空文字に置き換えられているため、問題なく結合が行われる
dfA["列名"] = dfA["列名"] + dfC["列名"] 

replace利用時の挙動の違い

.replace

行に入っている値の中身を全部変換する場合は、.strは不要

.str.replace

文字列操作(例えば文字列の一部置換など)の場合は、.strが必要

意図せず行の値がタプルになる

症状

データを入れる処理に続けて、
10行分のデータを入れている最中に下記のエラーが発生した

valueerror length of values (1) does not match length of index (10)

原因

エラーが発生した処理の1つ前の処理のコードを見ると、
以下のように不要なカンマがついていた。

dfA["列名"] = (固定値 + dfB["列名"],)

Pythonの構文上、最後にカンマがついているため
10行分のデータを持った1つのタプルとして判別されており
1行分のデータしか入っていない状態になっていた。

また、VSCodeのフォーマッターで自動的に括弧がつくのも
判別のしづらさに一役買い、原因箇所特定に時間を要してしまった。

対処法

不要なカンマを除去する

dfA["列名"] = (固定値 + dfB["列名"])

DataFrame値の文字列分割(.strつけ忘れ)

誤ったコード

下記のようにすると、dfB列における最初の3行を抽出してしまう。

dfA["列名"] = dfB["列名"][:3]

正しいコード

「.str」をつけると、dfB列の各要素における最初の3文字を取得する

dfA["列名"] = dfB["列名"].str[:3]

参考

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?