为何使用pd.loc修改Pandas日期列dtype无效,直接赋值却生效?
问题原因解析
这两种写法的差异本质是Pandas对列赋值的两种不同处理逻辑:
直接用
my_df['date'] = pd.to_datetime(my_df['date'])时,是直接用一个全新的datetime64类型Series替换掉原来的object类型列。Pandas会直接接受新Series的 dtype,完全覆盖原列的类型与数据,最终列类型自然变为datetime64。用
my_df.loc[:, 'date'] = pd.to_datetime(my_df['date'])时,是在原列的内存空间上做原地修改。由于原列的 dtype 是object——这是一个可以存储任意Python对象的通用容器,当把datetime对象塞进这个容器时,Pandas不会主动修改列的原有dtype,因此最终列仍然保持object类型。
额外说明:如果原列是数值类 dtype,loc原地赋值可能会自动触发类型转换,但object类型的包容性极强,datetime对象作为Python对象的一种,存进去不会改变容器本身的类型。
内容的提问来源于stack exchange,提问作者Toast
相关产品推荐
相关产品推荐

