pandas学习笔记—pandas时序数据处理需要注意的一点(TypeError: float() argument must be a string or a number, not 'Times)

大家在处理时序数据时可能会遇到以下错误:

TypeError: float() argument must be a string or a number, not 'Timestamp'

用以下两种代码处理dataframe时,第一种处理方法会导致时间列的数据类型转变为object

第一种:

new_data=origin_data.copy()
new_data.iloc[0,0]="date_time" #这一行还有下面的一行是想给日期列命名,一个中文名一个英文名
new_data.iloc[1,0]="日期_时间"
print(new_data.dtypes)
var_key_all=list(new_data.iloc[0])
var_value_all=list(new_data.iloc[1])
dict_var=dict(zip(var_key,var_value))

输出结果为:

0     object
1     object
2     object
3     object
4     object
5     object
6     object
7     object
8     object
9     object
10    object
11    object
12    object
13    object
14    object
15    object
16    object
17    object
18    object
19    object
20    object
21    object
dtype: object

可以看到,dataframe中的所有13列的数据类型都为“object”。原来日期列的数据类型为“datetime64[ns]”,第一种代码处理后会将字符串加入到原来的日期列,导致日期列的数据类型由“datetime64[ns]”转变为“object”,进而导致后续时序作图出现本文开始给出的错误。
如果用以下代码,则会避免这个问题:

new_data=origin_data.copy()
var_key_all=list(new_data.iloc[0])
var_value_all=list(new_data.iloc[1])
var_key_all[0]="date_time"
var_value_all[0]="日期_时间"
print(new_data.dtypes)
dict_var=dict(zip(var_key_all,var_value_all))
new_data.columns=var_value_all

输出:

0     datetime64[ns]
1             object
2             object
3             object
4             object
5             object
6             object
7             object
8             object
9             object
10            object
11            object
12            object
13            object
14            object
15            object
16            object
17            object
18            object
19            object
20            object
21            object
dtype: object

可以看到第一列,即日期列还是“datetime64[ns]”类型,进行时序作图时就不会出错。

当然了,我们也可以直接将变为object类型的时间列转换为日期型数据:

D_processed["日期_时间"]=pd.to_datetime(D_processed["日期_时间"])

你可能感兴趣的:(机器学习,数据科学,信号处理)