我怎樣才能 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 海登, ID 8.0 Renton, WA 2.0 NaN NaN
華盛頓州斯波坎市 3.0 Amber,華盛頓州 2.0 NaN NaN NaN NaN
蘇福爾斯,SD 9.0 石山,GA 2.0 沃特敦,SD 2.0 戴爾拉皮茲,SD 2.0
Ludowici, GA 11.0 NaN NaN NaN NaN NaN NaN

這個數據集有 600 列 (300 * 2)。

我想用這些條件轉換值:

  1. 將 home_city_# 列值中的“”或“,”更改為“_”(在條形下方)。例如,“Sioux Falls, SD”到“Sioux_Falls__SD”
  2. 將缺失值轉換為 ‘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(lambda x: x.replace('null', "-1"))

試試

citys = [col for col in df.columns if 'home_city_' in col]
numbers = [col for col in df.columns if 'home_number_' in col]

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

要執行正確的任務,您必須獲取“home_city_#”和“home_number_#”的列名。這是在前兩行中完成的。

為了用 "_" 替換 " ""," 我用 replace() code>regex=True 使用正則表達式。 \s (是一個快捷方式)並刪除所有空格,這也可以替換為

為了填充 NaN,我使用 fillna 並設置想要的值 -1m。我建議不要在列中混合類型。因此,我使用 -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 Ludowici, GA 11.0 NaN NaN

輸出將是

 home_city_1 home_number_1 home_city_2 home_number_2
0 Coeur_D_Alene__ID 13.0 海登__ID 8.0
1 斯波坎__WA 3.0 琥珀__WA 2.0
2 Sioux_Falls__SD 9.0 Stone_Mountain__GA 2.0
3 Ludowici__GA 11.0 m -1.0

考慮到 df 是你的數據框的名稱,你可以試試這個:

city_cols = df.filter(regex='^home_city').columns
df[city_cols] = (df[city_cols]
                 。代替('', '-')
                 .replace(',', '-', 正則表達式=True)
                 .fillna('m'))

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

通過使用 pandas.DataFrame .filter 和正則表達式,您可以按具有相同前綴的列進行過濾。