reindex()方法失效求助:print(frame3)未达预期输出
Troubleshooting Pandas reindex() Not Working as Expected
嘿,我猜你大概率是踩了 pandas reindex() 的几个常见坑之一!先给你梳理几个最容易犯的错误,以及对应的解决办法:
最常见的错误:没把结果赋值给变量
pandas 的 reindex() 默认是返回一个新的 DataFrame,不会直接修改原数据。如果你的代码是类似这样的:
import pandas as pd # 你的原始DataFrame frame = pd.DataFrame({'col1': [1,2,3], 'col2': [4,5,6]}, index=['a','b','c']) # 调用reindex但没赋值 frame.reindex(['a','b','d']) # 然后打印frame3 print(frame3)
那要么会报 NameError(因为frame3根本没定义),要么打印出来的还是原来的frame数据——这肯定和你的预期不符!
解决办法:把reindex的结果赋值给目标变量
frame3 = frame.reindex(['a','b','d']) print(frame3)
这样frame3就会是你想要的重新索引后的新DataFrame了。
第二个可能:误用inplace参数
如果你想直接修改原DataFrame而不是创建新对象,可能会尝试用inplace=True,但如果写错了参数名(比如拼写成in_place),或者没设置这个参数,那也达不到效果。不过要注意:inplace参数在 pandas 新版本里已经被标记为弃用了,更推荐上面的赋值方式。
如果一定要用(不推荐),正确写法是:
frame.reindex(['a','b','d'], inplace=True) frame3 = frame print(frame3)
第三个可能:索引类型/值不匹配
如果你的新索引和原索引类型不一样(比如原索引是整数,新索引是字符串),或者新索引的拼写和原索引不匹配,会导致匹配失败,出现全NaN的情况。比如原索引是[1,2,3],你用['1','2','4']去reindex,就会完全匹配不上。
解决办法:检查索引的类型和拼写,确保两者一致
比如把新索引转换成和原索引相同的类型:
# 原索引是整数类型 frame = pd.DataFrame({'col1': [1,2,3]}, index=[1,2,3]) # 把新索引转换成整数 new_index = [1,2,4] frame3 = frame.reindex(new_index) print(frame3)
如果这些情况都不符合你的问题,麻烦把你的具体代码、实际输出结果和预期输出结果贴出来,这样我就能更精准地帮你定位问题啦!
内容的提问来源于stack exchange,提问作者Jeong
相关产品推荐
相关产品推荐

