df['Discount_rate'] = df['Discount_rate'].apply(str).apply(lambda x: float(x) if '.' in x else int(str(x)))报错invalid literal for int() with base 10: 'Discount_rate'
时间: 2024-02-01 16:02:41 浏览: 149
这个错误提示看起来是因为你的数据中存在一些异常值,导致无法转换成浮点数或整数。
你可以尝试在转换前,先查看下该列中的数据是否全部符合要求。可以使用`value_counts()`方法查看该列中的不同取值。
另外,你也可以尝试将转换函数拆分成两部分,先将字符串转换成浮点数,再用`math.isnan()`判断是否为非数字类型,如果是,则将其转换成整数。
例如:
```
import math
def convert_discount_rate(x):
x = float(x)
if math.isnan(x):
return -1
elif '.' in str(x):
return x
else:
return int(x)
df['Discount_rate'] = df['Discount_rate'].apply(str).apply(convert_discount_rate)
```
这样处理后,如果有非数字类型的数据,会被转换成-1,便于后续处理。
相关问题
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出现cannot convert float NaN to integer的报错怎么解决
出现 `cannot convert float NaN to integer` 的报错是因为在 `null_distance` 的计算中,`data['Distance']` 中存在缺失值 `NaN`,无法将其转换为整数类型。可以尝试将 `null_distance` 的计算改为:
```python
null_distance = (data['Distance'].fillna(-1) == -1).astype(int)
```
这样可以先将 `NaN` 值填充为 -1,再进行计算,避免了无法转换类型的问题。
def pre(dataset): ''''数据预处理''' # 源数据 data = dataset.copy() # 对折扣率进行处理 data['is_manjian'] = data['Discount_rate'].apply(lambda x: 1 if ":" in str(x) else 0) # Discount_rate是否为满减 data['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])) # 满减全部转换为折扣率 data['min_cost_of_manjian'] = data['Discount_rate'].apply(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'].apply(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(): data['date'] = pd.to_datetime(data['Date'], format='%Y%m%d') # 打标 #领取优惠券后15天内使用的样本标签为1,否则为0 data['label'] = list(map(lambda x, y: 1 if (x - y).total_seconds() / (60 * 60 * 24) <= 15 else 0, data['date'],data['date_received'])) return data请重构代码,降低查重率
def preprocess_data(dataset):
data = dataset.copy()
data['is_manjian'] = data['Discount_rate'].apply(lambda x: 1 if ":" in str(x) else 0)
data['discount_rate'] = data['Discount_rate'].apply(lambda x: (float(str(x).split(':')[0]) - float(str(x).split(':')[1])) / float(str(x).split(':')[0]) if ":" in str(x) else float(x))
data['min_cost_of_manjian'] = data['Discount_rate'].apply(lambda x: int(str(x).split(':')[0]) if ":" in str(x) else -1)
data['Distance'].fillna(-1, inplace=True)
data['null_distance'] = data['Distance'].apply(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():
data['date'] = pd.to_datetime(data['Date'], format='%Y%m%d')
data['label'] = ((data['date'] - data['date_received']).dt.days <= 15).astype(int)
return data
阅读全文