使用pandas的.append方法新增行出现NaN值及索引异常的原因?
问题描述
现有如下数据集:
inner_watt = pd.DataFrame(pd.read_csv('input/0.7mm/0.7inner-100watt.csv')[' Current-A'])
数据集内容:
Current-A 2.3309 2.3309 2.3309 2.3309 2.3309 2.3309 2.3309 2.3309
先执行以下代码,截取前4条数据转置后添加到空DataFrame:
formatted_inner_watt = pd.DataFrame(columns=range(4)) formatted_inner_watt = formatted_inner_watt.append(inner_watt[0:4].T, ignore_index=True)
此时结果正常:
0 2.3309,2.3309,2.3309,2.3309
但执行以下代码添加接下来4条数据时,结果异常:
formatted_inner_watt = formatted_inner_watt.append(inner_watt[4:8].T, ignore_index=True)
异常结果:
0 2.3309,2.3309,2.3309,2.3309,NaN,NaN,NaN,NaN 1 NaN,NaN,NaN,NaN,2.3309,2.3309,2.3309,2.3309
请问这是什么原因?
原因分析
问题出在转置后的数据列名不匹配:
- 初始创建的
formatted_inner_watt列名是[0,1,2,3] - 对
inner_watt[0:4]转置时,转置后的DataFrame列名是原数据的行索引[0,1,2,3],和目标DataFrame列名完全匹配,所以append后能正常对齐。 - 对
inner_watt[4:8]转置时,转置后的DataFrame列名是原数据的行索引[4,5,6,7],和目标DataFrame的列名[0,1,2,3]完全不重合,Pandas会自动扩展列来容纳新的列名,同时在不匹配的位置填充NaN,就出现了你看到的异常结果。
解决方法
只需把转置后的列名重置为[0,1,2,3],确保和目标DataFrame列名一致,代码修改如下:
# 添加前4条数据 formatted_inner_watt = formatted_inner_watt.append(inner_watt[0:4].T.reset_index(drop=True), ignore_index=True) # 添加后4条数据 formatted_inner_watt = formatted_inner_watt.append(inner_watt[4:8].T.reset_index(drop=True), ignore_index=True)
或者更简洁的方式,直接重新设置转置后的列名:
# 处理后4条数据 next_batch = inner_watt[4:8].T next_batch.columns = range(4) formatted_inner_watt = formatted_inner_watt.append(next_batch, ignore_index=True)
这样操作后,新数据就能和原DataFrame的列对齐,不会出现NaN和列扩展的问题。
内容的提问来源于stack exchange,提问作者Wahab Khaddim
相关产品推荐
相关产品推荐

