大家在处理时序数据时可能会遇到以下错误:
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["日期_时间"])