今天在处理工作数据时遇到了dataframe赋值失败的情况,情况比较特殊有必要发出来分享一下!
首先,我是需要将日期“2024-06-25 00:00:00”这样一个timestamp格式的数据转化为指定格式的字符串(“20240625”)。我在许多博客中寻找了timestamp转str的方法,但是都很奇怪,无论我怎么赋值,我在print type时还是timestamp不是我想要的字符串。
for i in range(len(data_b1)):
#将timestamp转化为datetime格式
date_time = pd.to_datetime(data_b1.loc[i, '客户下单日期'], unit='s')
#将datetime转化为格式化后的字符串
str_time = date_time.strftime('%Y%m%d')
#将字符串赋值给原数据
data_b1.loc[i, '客户下单日期'] = str_time
print(data_b1.loc[i, '客户下单日期'],type(data_b1.loc[i,'客户下单日期']))
然而上述代码结果始终输出的是:
2024-06-25 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'>
这里我就很费解,因为我需要字符串后续用于拼接。解决上述问题的方式很简单,就是在赋值字符串前,先赋值一次int类型的数据。
修改后代码:
for i in range(len(data_b1)):
#将timestamp转化为datetime格式
date_time = pd.to_datetime(data_b1.loc[i, '客户下单日期'], unit='s')
#将datetime转化为格式化后的字符串
str_time = date_time.strftime('%Y%m%d')
#将int型数据赋值给原数据
data_b1.loc[i, '客户下单日期'] = 0
#将字符串赋值给原数据
data_b1.loc[i, '客户下单日期'] = str_time
print(data_b1.loc[i, '客户下单日期'],type(data_b1.loc[i,'客户下单日期']))
此时结果输出:
20240625 <class 'str'>
问题完美解决!所以我在这初步认为的原因是,我在一开始读取数据放入dataframe的时候,每个单元格的格式也全都保存在dataframe之中。当我填入符合Timestamp格式的字符串时,会被再次转回Timestamp格式,因此在此之前先赋值int型数据改变单元格格式,后续再赋值字符串就不会有问题了!