如何在Python的Pandas DataFrame中插入行?补全MySQL读取数据的缺失行
如何在Pandas DataFrame中补全缺失的Timestamp行并填充NULL值
当然可以实现你的需求!这里有两种简单易懂的方法,帮你补全缺失的1515581722这条记录,让data1和data2自动填充为NULL(对应Pandas里的NaN):
方法一:利用时间重采样(适合时间序列场景)
因为你的timestamp是秒级Unix时间戳,我们可以先把它转换成Pandas的时间类型,再用重采样功能自动补全缺失的秒数:
import pandas as pd # 假设data是你从MySQL读取的原始DataFrame # 第一步:将timestamp列转为Pandas datetime类型(单位为秒) data['timestamp'] = pd.to_datetime(data['timestamp'], unit='s') # 第二步:把timestamp设为索引,按秒重采样,缺失值保留NaN(即SQL的NULL) data = data.set_index('timestamp') data_resampled = data.resample('S').asfreq() # 第三步:重置索引将timestamp变回普通列,再转回Unix时间戳格式(如果需要) data_resampled = data_resampled.reset_index() data_resampled['timestamp'] = data_resampled['timestamp'].astype('int64') // 10**9
处理后,缺失的1515581722行就会被自动插入,对应的data1和data2值为NaN,和你期望的NULL效果一致。
方法二:生成完整时间序列后合并(更直接的数值操作)
如果不想处理时间类型,我们可以直接基于现有timestamp的范围生成完整的秒序列,再和原数据做左连接:
import pandas as pd # 第一步:获取原始数据中timestamp的最小和最大值 min_ts = data['timestamp'].min() max_ts = data['timestamp'].max() # 第二步:生成从min到max的所有秒数的完整序列 full_timestamp = pd.DataFrame({'timestamp': range(min_ts, max_ts + 1)}) # 第三步:左连接原数据,自动补全缺失行,缺失值填充为NaN data_complete = pd.merge(full_timestamp, data, on='timestamp', how='left')
可选:将NaN替换为字符串'NULL'
如果需要把Pandas的NaN显示成字符串形式的NULL,可以添加这一步:
data_complete = data_complete.fillna('NULL')
不过日常数据分析中更推荐保留NaN,因为它是Pandas原生的缺失值标识,方便后续统计和处理。
两种方法都能完美实现你的需求,你可以根据场景选择:如果是时间序列分析,方法一更合适;如果只是简单补全行,方法二更直接。
内容的提问来源于stack exchange,提问作者Alejandro
相关产品推荐
相关产品推荐

