Предполагая, что у нас есть фрейм данных со значениями, предоставленными в JSON, вы можете проверить, если столбец без цифр остался прежним, то оставить без изменений, иначе удалите алфавиты.
df = sqlContext.createDataFrame(
[{"ThresholdTime": "48min",
"FallTime": "15Min",
"description": "PowerAmplifier"
},
{"ThresholdTime": "min",
"FallTime": "200min",
"description": "DolbyDigitall"}])
# What would column look like without alhpabets
col_without_alphabets = F.regexp_replace(df["ThresholdTime"], "[a-zA-Z]", "")
# What would column look like without numerals
col_without_numerals = F.regexp_replace(df["ThresholdTime"], "[0-9]", "")
# If without numerals the column remains the same then keep as-is, else remove alphabets
df.withColumn("NewThresholdTime",
F.when(col_without_numerals == df["ThresholdTime"],
F.lit(0))
.otherwise(col_without_alphabets)).show()
Вывод :
+--------+-------------+--------------+----------------+
|FallTime|ThresholdTime| description|NewThresholdTime|
+--------+-------------+--------------+----------------+
| 15Min| 48min|PowerAmplifier| 48|
| 200min| min| DolbyDigitall| 0|
+--------+-------------+--------------+----------------+
Добавление ответа для расширения одинакового для любого количества переменных.
L oop через любые переменные, для которых вы хотите сделать то же самое для.
new_columns = list()
for column in ["ThresholdTime", "FallTime"]:
# What would column look like without alphabets
col_without_alphabets = F.regexp_replace(df[column], "[a-zA-Z]", "")
# What would column look like without numerals
col_without_numerals = F.regexp_replace(df[column], "[0-9]", "")
# If without numerals the column remains the same then keep as-is, else remove alphabets
new_columns.append(F.when(col_without_numerals == df[column],
F.lit(0)).otherwise(col_without_alphabets).alias("New{}".format(column)))
df.select(["*"] + new_columns).show()
Выход:
+--------+-------------+--------------+----------------+-----------+
|FallTime|ThresholdTime| description|NewThresholdTime|NewFallTime|
+--------+-------------+--------------+----------------+-----------+
| 15Min| 48min|PowerAmplifier| 48| 15|
| 200min| min| DolbyDigitall| 0| 200|
+--------+-------------+--------------+----------------+-----------+