关于Pandas read_csv中index_col默认行为的疑问(附示例)
问题解答
你对read_csv中index_col=None的自动判断逻辑理解反了——只有当数据行的字段数多于表头字段数时,pandas才会自动将多出的列设为索引;反之,当表头字段数更多时,它只会给数据行缺失的列填充NaN,同时使用默认的整数索引。
你的测试案例分析
你的示例里,表头包含4个字段,数据行仅3个字段(比表头少1),这种情况不在pandas自动设置索引的触发条件内。运行代码后得到的结果是表头全部保留,数据行最后一列补NaN,默认整数索引作为行标签,这才是符合pandas实际行为的:
pandas koalas lizards kangaroos 0 1 2 3 NaN 1 4 5 6 NaN
pandas官方的准确推断规则
根据pandas官方文档,index_col=None时的自动索引推断逻辑是:
若表头行的字段数比数据行少1,第一列会被当作索引;否则,使用默认的
RangeIndex(整数索引)。
实现你预期效果的方法
如果你想把pandas列设为索引,需要显式指定index_col=0:
import pandas as pd df = pd.read_csv("io_tools_example_index.txt", index_col=0)
运行后将得到你预期的结果:
koalas lizards kangaroos pandas 1 2 3 NaN 4 5 6 NaN
内容的提问来源于stack exchange,提问作者An Ignorant Wanderer
相关产品推荐
相关产品推荐

