1) 値のテキストの一部を変更し (例: ‘, ‘ -> ‘__’)、2) Python データフレームの欠損値に異なる値を与えるにはどうすればよいですか?

JSON 変数を複数のペア変数に変換しました。
その結果、次のようなデータセットがあります

home_city_1 home_number_1 home_city_2 home_number_2 home_city_3 home_number_3 home_city_4 home_number_4
Coeur D Alene、ID 13.0 Hayden、ID 8.0 Renton、WA 2.0 NaN NaN
ワシントン州スポケーン 3.0 ワシントン州アンバー 2.0 NaN NaN NaN NaN
Sioux Falls, SD 9.0 Stone Mountain, GA 2.0 Watertown, SD 2.0 Dell Rapids, SD 2.0
Ludowici, GA 11.0 NaN NaN NaN NaN NaN NaN

このデータセットには 600 列 (300 * 2) があります。

これらの条件で値を変換したい:

  • home_city_# 列の値の「 」または「,」を「_」(バーの下) に変更します。たとえば、「Sioux Falls, SD」から「Sioux_Falls__SD」へ
  • 欠損値を「m」(home_city_# で欠損) または -1 (home_number_# で欠損) に変換
  • やってみた

    customer_home_city_json_2 = customer_home_city_json_1.replace(',', '_')

    customer_home_city_json_2 = customer_home_city_json_2 .apply(ラムダ x: x.replace('null', "-1"))

    やってみる

    citys = [col の 'home_city_' の場合、df.columns の col の col]
    numbers = [col の 'home_number_' の場合、df.columns の col の col]

    df[都市] = df[都市].replace("\s|,", "_", regex=True)
    df[都市] = df[都市].fillna('m')
    df[数字] = df[数字].fillna(-1)

    正しいタスクを実行するには、'home_city_#' と 'home_number_#' の列名を取得する必要があります。これは最初の 2 行で行われます。

    " "",""_" に置き換えるには、 replace() を regex=True を使用して正規表現を使用します。 \s (ショートカット) を挿入し、すべての空白を削除します。これは に置き換えることもできます。

    NaN を埋めるために、fillna を使用し、目的の値 -1 または m を設定します。列に型を混在させないことをお勧めします。そのため、「数字」には -1 を、都市には m を使用します。

    これがあなたの DataFrame です

     home_city_1 home_number_1 home_city_2 home_number_2
    0 Coeur D Alene、ID 13.0 ヘイデン、ID 8.0
    1 スポケーン、ワシントン州 3.0 アンバー、ワシントン州 2.0
    2 スー フォールズ、SD 9.0 ストーン マウンテン、GA 2.0
    3 ルドウィチ、GA 11.0 NaN NaN

    出力は

     home_city_1 home_number_1 home_city_2 home_number_2
    0 Coeur_D_Alene__ID 13.0 Hayden__ID 8.0
    1 スポケーン__WA 3.0 アンバー__WA 2.0
    2 Sioux_Falls__SD 9.0 Stone_Mountain__GA 2.0
    3 ルドウィチ__GA 11.0 m -1.0

    df がデータフレームの名前であることを考慮して、これを試すことができます:

    city_cols = df.filter(regex='^home_city').columns
    df[city_cols] = (df[city_cols]
    。交換(''、 '-')
    .replace(',', '-', regex=True)
    .fillna('m'))

    number_cols = df.filter(regex='^home_number').columns
    df[列数] = df[列数].fillna(-1)

    pandas.DataFrame を使用する.filter と regex を使用すると、同じプレフィックスを持つ列でフィルター処理できます。