源数据 data = dataset.copy() # 折扣率处理 data['is_manjian'] = data['Discount_rate'].map(lambda x: 1 if ':' in str(x) else 0) # Discount_rate是否为满减 data['discount_rate'] = data['Discount_rate'].map(lambda x: float(x) if ':' not in str(x) else (float(str(x).split(':')[0]) - float(str(x).split(':')[1])) / float(str(x).split(':')[0])) # 满减全部转换为折扣率 data['min_cost_of_manjian'] = data['Discount_rate'].map( lambda x: -1 if ':' not in str(x) else int(str(x).split(':')[0])) # 满减的最低消费 # 距离处理 data['Distance'].fillna(-1, inplace=True) # 空距离填充为-1 data['null_distance'] = data['Distance'].map(lambda x: 1 if x == -1 else 0) # 时间处理 data['date_received'] = pd.to_datetime(data['Date_received'], format='%Y%m%d') if 'Date' in data.columns.tolist(): # off_train data['date'] = pd.to_datetime(data['Date'], format='%Y%m%d') # 返回 return data将以上代码改写并优化而功能不变
时间: 2024-01-05 18:02:39 浏览: 122
可以将以上代码改写如下:
```
def process_data(dataset):
data = dataset.copy()
# 折扣率处理
is_manjian = data['Discount_rate'].str.contains(':').astype(int)
discount_rate = data['Discount_rate'].apply(lambda x:
float(x) if ':' not in str(x) else
(float(str(x).split(':')[0]) - float(str(x).split(':')[1])) / float(str(x).split(':')[0]))
min_cost_of_manjian = data['Discount_rate'].apply(lambda x:
-1 if ':' not in str(x) else
int(str(x).split(':')[0]))
data['is_manjian'] = is_manjian
data['discount_rate'] = discount_rate
data['min_cost_of_manjian'] = min_cost_of_manjian
# 距离处理
data['Distance'].fillna(-1, inplace=True)
null_distance = (data['Distance'] == -1).astype(int)
data['null_distance'] = null_distance
# 时间处理
data['date_received'] = pd.to_datetime(data['Date_received'], format='%Y%m%d')
if 'Date' in data.columns.tolist():
data['date'] = pd.to_datetime(data['Date'], format='%Y%m%d')
return data
```
主要优化点如下:
1. 使用了 apply 函数代替了 map 函数,因为 apply 函数可以返回Series而不是单个值,更加灵活。
2. 使用了 str.contains 函数代替了 map 函数中的字符串判断,因为 str.contains 更加简洁易读。
3. 使用了 .astype(int) 代替了 lambda 函数中的 if else 语句,因为 .astype(int) 更加高效。
4. 将同一操作的代码写在一起,更加清晰易懂。
阅读全文