当前位置: 首页 > news >正文

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不会用第一列作为行号,同时还会丢弃最后一列错误的值。

总结

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

加一张图来总结下,我画的框框那里讲的很好:
pandas read_csv参数index_col = None,0,False的区别


相关文章:

  • 阿里云服务器 phpstudy 搭建多个网站并配置多域名
  • 微信小程序开发 找不到 AppID 和 AppSecret
  • 该模块暂无可用的公众号或小程序请先分配权限
  • Python 获取 指定文件夹目录内 所有文件名
  • Python 自动补0
  • .htaccess 强制https 单独排除某个目录
  • mac idea2020.3 配置tomcat和创建javaWeb项目
  • Cannot resolve method ‘getParameter(java.lang.String)‘
  • idea 新建没有servlet
  • create java ee 6 annotated class 灰色 无法取消
  • idea2020.3 右键new没有servlet
  • 美化Ubuntu18.04 安装mac os主题
  • CSS3 @media同时对宽度width和高度height判断
  • 远程桌面身份验证错误:要求的函数不受支持 的解决
  • Windows下 创建 .htaccess无文件名
  • eclipse的离线汉化
  • JavaScript-Array类型
  • leetcode386. Lexicographical Numbers
  • Mac转Windows的拯救指南
  • MySQL主从复制读写分离及奇怪的问题
  • Nodejs和JavaWeb协助开发
  • Node项目之评分系统(二)- 数据库设计
  • redis学习笔记(三):列表、集合、有序集合
  • Vue2 SSR 的优化之旅
  • Vue--数据传输
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 编写高质量JavaScript代码之并发
  • 高性能JavaScript阅读简记(三)
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 前端_面试
  • 少走弯路,给Java 1~5 年程序员的建议
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​ssh免密码登录设置及问题总结
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (06)Hive——正则表达式
  • (10)STL算法之搜索(二) 二分查找
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (30)数组元素和与数字和的绝对差
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (libusb) usb口自动刷新
  • (Python第六天)文件处理
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (四)JPA - JQPL 实现增删改查
  • (算法)Travel Information Center
  • (一)kafka实战——kafka源码编译启动
  • (转)【Hibernate总结系列】使用举例
  • (转)memcache、redis缓存
  • (转载)PyTorch代码规范最佳实践和样式指南
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。