我將一個 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)。
我想用這些條件轉換值:
- 將 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(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
並設置想要的值 -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 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
和正則表達式,您可以按具有相同前綴的列進行過濾。