';ValueError:无法将字符串转换为浮点值';在python中学习
我有一个带有日期列的数据框。数据从csv文件导入。当我尝试拟合回归模型时,我得到了错误';ValueError:无法将字符串转换为浮点值';在python中学习,python,pandas,numpy,scikit-learn,random-forest,Python,Pandas,Numpy,Scikit Learn,Random Forest,我有一个带有日期列的数据框。数据从csv文件导入。当我尝试拟合回归模型时,我得到了错误ValueError:无法将字符串转换为float:'2019-08-30 07:51:21。 我怎样才能摆脱它 这是数据帧 source.csv event_id tsm_id rssi_ts rssi batl batl_ts ts_diff 0 417736018 4317714 2019-09-05 20:00:07 140 100.0 2019-
ValueError:无法将字符串转换为float:'2019-08-30 07:51:21
。
我怎样才能摆脱它
这是数据帧
source.csv
event_id tsm_id rssi_ts rssi batl batl_ts ts_diff
0 417736018 4317714 2019-09-05 20:00:07 140 100.0 2019-09-05 18:11:49 01:48:18
1 417735986 4317714 2019-09-05 20:00:07 132 100.0 2019-09-05 18:11:49 01:48:18
2 418039386 4317714 2019-09-06 01:00:08 142 100.0 2019-09-06 00:11:50 00:48:18
3 418039385 4317714 2019-09-06 01:00:08 122 100.0 2019-09-06 00:11:50 00:48:18
4 420388010 4317714 2019-09-07 15:31:07 143 100.0 2019-09-07 12:11:50 03:19:17
这是我的密码:
model = pd.read_csv("source.csv")
model.describe()
event_id tsm_id. rssi batl
count 5.000000e+03 5.000000e+03 5000.000000 3784.000000
mean 3.982413e+08 4.313492e+06 168.417200 94.364429
std 2.200899e+07 2.143570e+03 35.319516 13.609917
min 3.443084e+08 4.310312e+06 0.000000 16.000000
25% 3.852882e+08 4.310315e+06 144.000000 97.000000
50% 4.007999e+08 4.314806e+06 170.000000 100.000000
75% 4.171803e+08 4.314815e+06 195.000000 100.000000
max 4.258451e+08 4.317714e+06 242.000000 100.000000
labels_b = np.array(model['batl'])
features_r= model.drop('batl', axis = 1)
features_r = np.array(features_r)
from sklearn.model_selection import train_test_split
train_features, test_features, train_labels, test_labels = train_test_split(features_r,
labels_b, test_size = 0.25, random_state = 42)
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(n_estimators = 1000, random_state = 42)
rf.fit(train_features, train_labels);
这里是错误消息:
ValueError Traceback (most recent call last)
<ipython-input-28-bc774a9d8239> in <module>
4 rf = RandomForestRegressor(n_estimators = 1000, random_state = 42)
5 # Train the model on training data
----> 6 rf.fit(train_features, train_labels);
~/ml/env/lib/python3.7/site-packages/sklearn/ensemble/forest.py in fit(self, X, y, sample_weight)
247
248 # Validate or convert input data
--> 249 X = check_array(X, accept_sparse="csc", dtype=DTYPE)
250 y = check_array(y, accept_sparse='csc', ensure_2d=False, dtype=None)
251 if sample_weight is not None:
~/ml/env/lib/python3.7/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
494 try:
495 warnings.simplefilter('error', ComplexWarning)
--> 496 array = np.asarray(array, dtype=dtype, order=order)
497 except ComplexWarning:
498 raise ValueError("Complex data not supported\n"
~/ml/env/lib/python3.7/site-packages/numpy/core/numeric.py in asarray(a, dtype, order)
536
537 """
--> 538 return array(a, dtype, copy=False, order=order)
539
540
ValueError: could not convert string to float: '2019-08-30 07:51:21'
ValueError回溯(最近一次调用)
在里面
4 rf=随机森林回归器(n_估计值=1000,随机状态=42)
5#根据训练数据训练模型
---->6 rf.配合(列车特征、列车标签);
~/ml/env/lib/python3.7/site-packages/sklearn/ensemble/forest.py适合(自身、X、y、样本重量)
247
248#验证或转换输入数据
-->249 X=检查数组(X,接受sparse=“csc”,dtype=dtype)
250 y=检查数组(y,接受sparse='csc',确保2d=False,dtype=None)
251如果样品重量不是无:
检查数组中的~/ml/env/lib/python3.7/site-packages/sklearn/utils/validation.py(数组、接受稀疏、接受大稀疏、数据类型、顺序、复制、强制所有有限、确保2d、允许nd、确保最小样本、确保最小特征、警告数据类型、估算器)
494尝试:
495警告。simplefilter('error',ComplexWarning)
-->496数组=np.asarray(数组,dtype=dtype,order=order)
497除复杂警告外:
498 raise VALUERROR(“不支持复杂数据\n”
asarray中的~/ml/env/lib/python3.7/site-packages/numpy/core/numeric.py(a,数据类型,顺序)
536
537 """
-->538返回数组(a,数据类型,copy=False,order=order)
539
540
ValueError:无法将字符串转换为浮点:“2019-08-30 07:51:21”
阅读模型后,尝试这样做
import datetime
to_timestamp_fct = lambda x: datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S').timestamp()
model['rssi_ts'] = model['rssi_ts'].apply(to_timestamp_fct)
在阅读模型后,尝试这样的事情
import datetime
to_timestamp_fct = lambda x: datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S').timestamp()
model['rssi_ts'] = model['rssi_ts'].apply(to_timestamp_fct)
您必须将时间日期从字符串转换为时间戳。这可以通过以下行完成(其他所有内容都在写入时保留):
模型=(
pd.read_csv(“source.csv”,parse_dates=['rssi_ts','batl_ts',],date_parser=lambda x:pd.to_datetime(x))
.分配(
rssi_ts=lambda x:x.loc[:,'rssi_ts'].astype(int)/10**9,
batl_ts=lambda x:x.loc[:,'batl_ts'].aType(int)/10**9,
ts_diff=lambda x:pd.to_timedelta(x.loc[:,'ts_diff'])。astype(int)/10**9
)
)
由parse_dates
参数创建的对象可以转换为float
编辑:缺少括号
Edit2:对于其他时间戳和增量时间。您必须将时间日期从字符串转换为时间戳。这可以通过以下行完成(其他所有内容都在写入时保留):
模型=(
pd.read_csv(“source.csv”,parse_dates=['rssi_ts','batl_ts',],date_parser=lambda x:pd.to_datetime(x))
.分配(
rssi_ts=lambda x:x.loc[:,'rssi_ts'].astype(int)/10**9,
batl_ts=lambda x:x.loc[:,'batl_ts'].aType(int)/10**9,
ts_diff=lambda x:pd.to_timedelta(x.loc[:,'ts_diff'])。astype(int)/10**9
)
)
由parse_dates
参数创建的对象可以转换为float
编辑:缺少括号
Edit2:对于其他时间戳和增量时间。它将您的值作为字符串读取…要使模型工作,它必须读取具有整数或浮点的值,因此使用此函数:
model = (
pd.read_csv("source.csv", parse_dates=['rssi_ts', 'batl_ts'], date_parser=lambda x: pd.to_datetime(x))
.assign(rssi_ts=lambda x: x.loc[:, 'rssi_ts'].astype(int) / 10 ** 9)
它以字符串的形式读取您的值…要使模型工作,它必须读取具有整数或浮点的值,因此使用此函数:
model = (
pd.read_csv("source.csv", parse_dates=['rssi_ts', 'batl_ts'], date_parser=lambda x: pd.to_datetime(x))
.assign(rssi_ts=lambda x: x.loc[:, 'rssi_ts'].astype(int) / 10 ** 9)
它引发了相同的错误。虽然您在此处仅应用于一个功能,但我有3个具有时间戳的功能。它引发了相同的错误。虽然您在此处仅应用于一个功能,但我有3个具有时间戳的功能。谢谢您的回答。尽管它现在给出了错误'TypeError:float()参数必须是字符串或数字,而不是“时间戳”。这些类型是:event_id int64 tsm_tuid int64 rssi\ts float64 rssi int64 batl\ts float64 batl\ts datetime64[ns]ts_diff object dtype:object谢谢您的回答。尽管现在给出了错误“TypeError:float()参数必须是字符串或数字,而不是“时间戳”。这些是类型:事件id int64 tsm\U tuid int64 rssi\ts float64 rssi int64 batl\ts datetime64[ns]ts_diff对象数据类型:对象