pandas read_csv参数index_col = None,0,False的区别

前言
网上好多对index_col的解释都有点别扭,基本都是将False和None等同起来了。(都是重新设置一列成为index值),所以我去谷歌了解了一下。

介绍
pandas是python中的一个库,read_csv是pandas的读取csv数据的一个函数。而index_col是read_csv中的一个参数。用来指定表格的索引值。

来看下pandas官方文档是怎么定义index_col的:

index_col : int, sequence or bool, optional

Column to use as the row labels of the DataFrame. If a sequence is given, a MultiIndex is used. If you have a malformed file with delimiters at the end of each line, you might consider index_col=False to force pandas to not use the first column as the index (row names).

解释一下: index_col的值有三种,整数型,序列,布尔,并且是可选的,默认是None

如果您的文件格式不正确,每行末尾都有分隔符,则可以考虑使用index_col=false强制pandas不使用第一列作为索引(行名)。

区别
在默认为None的时候,pandas会自动将第一列作为索引,并额外添加一列。所以大多我们会使用index_col=0,直接将第一列作为索引,不额外添加列。

import io
import pandas as pd
t=""“index,a,b
hi,hello,pandas”""
df = pd.read_csv(io.StringIO(t))
print(df)
上面是index_col为None的代码(默认为None),结果如下:

index a b
0 hi hello pandas
可以看到多了一列,做为line label,也就是行号。

来试下index_col为0的情况:

import io
import pandas as pd
t=""“index,a,b
hi,hello,pandas”""
df = pd.read_csv(io.StringIO(t),index_col = 0)
print(df)
输出如下(打印出现了错行,不过对写入文件没影响)

       a       b

index
hi hello pandas
可以看到这时的line label就是第一列的值。

知道了None和0的作用,那么False呢?其实上面的官方文档已经写了。

假设你有一个格式错误的文件,哪里错了啊?
文件的每行末尾都有分隔符。这就是格式错误的。

那么就可以使用False来强制不使用第一列作为索引,同时丢弃最后一列。(因为末尾多了个分隔符,所以最后一列就是NaN)

同样来看下演示:

import io
import pandas as pd
t=""“index,a,b
hi,hello,pandas,”""
df = pd.read_csv(io.StringIO(t),index_col = 0)
print(df)
df = pd.read_csv(io.StringIO(t),index_col = False)
print(df)
df = pd.read_csv(io.StringIO(t),index_col = None)
print(df)
我这里故意在定义t的时候,给pandas后面加了个逗号。看下结果:

index       a   b

hi hello pandas NaN
index a b
0 hi hello pandas
index a b
hi hello pandas NaN
看到区别了吧!

如果index_col是None或者0,他们输出时候都会多了个NaN,而且都将第一列作为行号。

而False不会用第一列作为行号,同时还会丢弃最后一列错误的值。

总结
所以百度上那些都是乱转载的,根本不详细。还是要多实践。

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值