导入必要的包

import pandas as pd
import numpy as np
from pandas.api.types import CategoricalDtype
from io import StringIO

dtype:

指定整个DataFrame的数据类型或用字典的方式指定各个列的数据类型

data = pd.read_csv('diamonds.csv',dtype=object)
data.head()out:
carat   cut color   clarity depth   table   price   x   y   z
0   0.23    Ideal   E   SI2 61.5    55  326 3.95    3.98    2.43
1   0.21    Premium E   SI1 59.8    61  326 3.89    3.84    2.31
2   0.23    Good    E   VS1 56.9    65  327 4.05    4.07    2.31
3   0.29    Premium I   VS2 62.4    58  334 4.2 4.23    2.63
4   0.31    Good    J   SI2 63.3    58  335 4.34    4.35    2.75data.dtypesout:
carat      object
cut        object
color      object
clarity    object
depth      object
table      object
price      object
x          object
y          object
z          object
dtype: objectdata = pd.read_csv('diamonds.csv',dtype={'carat': np.float64,'depth': np.float64,'table':np.float64})
data.dtypes
out:
carat      float64
cut         object
color       object
clarity     object
depth      float64
table      float64
price        int64
x          float64
y          float64
z          float64
dtype: object

可以通过指定dtype ='category’或dtype = CategoricalDtype(类别,有序)直接解析类别列。

data = pd.read_csv('diamonds.csv',dtype='category')
data.dtypesout:
carat      category
cut        category
color      category
clarity    category
depth      category
table      category
price      category
x          category
y          category
z          category
dtype: object

可以使用dict指定将某列为Category类型:

data = pd.read_csv('diamonds.csv',dtype={'cut':'category'})
data.dtypesout:
carat       float64
cut        category
color        object
clarity      object
depth       float64
table       float64
price         int64
x           float64
y           float64
z           float64
dtype: object
data.cut.value_counts()out:
Ideal        21551
Premium      13791
Very Good    12082
Good          4906
Fair          1610
Name: cut, dtype: int64

指定dtype ='category’将导致无序分类,其类别是数据中观察到的唯一值。

要更好地控制类别和顺序,可以创建CategoricalDtype,然后将其传递给该列的dtype。

from pandas.api.types import CategoricalDtype
dtype = CategoricalDtype(['Ideal','Premium','Very Good','Good','Fair'],ordered=True)
data = pd.read_csv('diamonds.csv',dtype={'cut':dtype})
data.dtypesout:
carat       float64
cut        category
color        object
clarity      object
depth       float64
table       float64
price         int64
x           float64
y           float64
z           float64
dtype: object

使用dtype = CategoricalDtype时,dtype.categories之外的“意外”值将被视为缺失值。

from pandas.api.types import CategoricalDtype
dtype = CategoricalDtype(['Ideal','Premium','Very Good','Good'],ordered=True)
data = pd.read_csv('diamonds.csv',dtype={'cut':dtype})
data[data.cut.isnull()].head()out:carat   cut color   clarity depth   table   price   x   y   z
8   0.22    NaN E   VS2 65.1    61.0    337 3.87    3.78    2.49
91  0.86    NaN E   SI2 55.1    69.0    2757    6.45    6.33    3.52
97  0.96    NaN F   SI2 66.3    62.0    2759    6.27    5.95    4.07
123 0.70    NaN F   VS2 64.5    57.0    2762    5.57    5.53    3.58
124 0.70    NaN F   VS2 65.3    55.0    2762    5.63    5.58    3.66

header:

文件可能包含标题行,也可能没有标题行。 pandas假定第一行应用作列名:

from io import StringIO
data = ('a,b,c\n''1,2,3\n''4,5,6\n''7,8,9')
pd.read_csv(StringIO(data))out:a   b   c
0   1   2   3
1   4   5   6
2   7   8   9

通过指定name与header,可以重命名列以及是否丢弃标题行:

pd.read_csv(StringIO(data),names=['foo','bar','baz'],header=0)out:foo bar baz
0   1   2   3
1   4   5   6
2   7   8   9

通过指定name与header,可以重命名列以及是否丢弃标题行:

pd.read_csv(StringIO(data),names=['foo','bar','baz'],header=0)out:foo bar baz
0   1   2   3
1   4   5   6
2   7   8   9
pd.read_csv(StringIO(data),names=['foo','bar','baz'],header=None)out:foo bar baz
0   a   b   c
1   1   2   3
2   4   5   6
3   7   8   9

如果标题不在第一行中,则将行号传递给标题,将跳过header前面的行:

data = ('skip this skip it\n''a,b,c\n''1,2,3\n''4,5,6\n''7,8,9')
pd.read_csv(StringIO(data),header=1)out:a   b   c
0   1   2   3
1   4   5   6
2   7   8   9
Duplicate Names Parsing

usecols:

使用列名,位置号或可调用的方法选择文件中列的任何子集.

data = 'a,b,c,d\n1,2,3,foo\n4,5,6,bar\n7,8,9,baz'
pd.read_csv(StringIO(data))out:a   b   c   d
0   1   2   3   foo
1   4   5   6   bar
2   7   8   9   baz
pd.read_csv(StringIO(data),usecols=['b','d'])out:b   d
0   2   foo
1   5   bar
2   8   baz
pd.read_csv(StringIO(data),usecols=[0,1,3])out:a   b   d
0   1   2   foo
1   4   5   bar
2   7   8   baz
pd.read_csv(StringIO(data),usecols=lambda x: x.upper() in ['A','C'])out:a   c
0   1   3
1   4   6
2   7   9

index_col:

data = ('a,b,c\n''4,apple,bat,5.7\n''8,orange,cow,10')
pd.read_csv(StringIO(data))out:a   b   c
4   apple   bat 5.7
8   orange  cow 10.0
pd.read_csv(StringIO(data),index_col=0)out:a   b   c
4   apple   bat 5.7
8   orange  cow 10.0
data = ('a,b,c\n''4,apple,bat\n''8,orange,cow')
pd.read_csv(StringIO(data))out:a   b   c
0   4   apple   bat
1   8   orange  cow
pd.read_csv(StringIO(data),index_col=0)out:b   c
a
4   apple   bat
8   orange  cow
pd.read_csv(StringIO(data),usecols=['b','c'],index_col=0)out:c
b
apple   bat
orange  cow

parse_dates和date_parser:

为了更好地使用日期时间数据,read_csv()使用关键字参数parse_dates和date_parser允许用户指定列的日期/时间格式,将string转换为日期时间对象。

foo = ('date,A,B,C\n''2009-01-01,a,1,2\n''2009-01-02,b,3,4\n''2009-01-03,c,4,5\n')
pd.read_csv(StringIO(foo),index_col=0,parse_dates=True)out:A   B   C
date
2009-01-01  a   1   2
2009-01-02  b   3   4
2009-01-03  c   4   5
pd.read_csv(StringIO(foo),index_col=0,parse_dates=True).index
DatetimeIndex(['2009-01-01', '2009-01-02', '2009-01-03'], dtype='datetime64[ns]', name='date', freq=None)

通常,我们可能希望分别存储日期和时间数据,或分别存储各种日期字段。 parse_dates关键字可用于指定列的组合,以从中解析日期和/或时间。 您可以指定要parse_dates的列或嵌套列表,结果日期列将被添加到输出的前面(以便不影响现有的列顺序),新的列名为各列Name的连接。

tmp = ('KORD,19990127, 19:00:00, 18:56:00, 0.8100\n''KORD,19990127, 20:00:00, 19:56:00, 0.0100\n''KORD,19990127, 21:00:00, 20:56:00, -0.5900\n''KORD,19990127, 21:00:00, 21:18:00, -0.9900\n''KORD,19990127, 22:00:00, 21:56:00, -0.5900\n''KORD,19990127, 23:00:00, 22:56:00, -0.5900')
pd.read_csv(StringIO(tmp),header=None,parse_dates=[[1,2],[1,3]])out:1_2 1_3 0   4
0   1999-01-27 19:00:00 1999-01-27 18:56:00 KORD    0.81
1   1999-01-27 20:00:00 1999-01-27 19:56:00 KORD    0.01
2   1999-01-27 21:00:00 1999-01-27 20:56:00 KORD    -0.59
3   1999-01-27 21:00:00 1999-01-27 21:18:00 KORD    -0.99
4   1999-01-27 22:00:00 1999-01-27 21:56:00 KORD    -0.59
5   1999-01-27 23:00:00 1999-01-27 22:56:00 KORD    -0.59

默认情况下,解析器会删除组件日期列,可以选择通过keep_date_col关键字保留它们:

pd.read_csv(StringIO(tmp),header=None,parse_dates=[[1,2],[1,3]],keep_date_col=True)out:1_2 1_3 0   1   2   3   4
0   1999-01-27 19:00:00 1999-01-27 18:56:00 KORD    19990127    19:00:00    18:56:00    0.81
1   1999-01-27 20:00:00 1999-01-27 19:56:00 KORD    19990127    20:00:00    19:56:00    0.01
2   1999-01-27 21:00:00 1999-01-27 20:56:00 KORD    19990127    21:00:00    20:56:00    -0.59
3   1999-01-27 21:00:00 1999-01-27 21:18:00 KORD    19990127    21:00:00    21:18:00    -0.99
4   1999-01-27 22:00:00 1999-01-27 21:56:00 KORD    19990127    22:00:00    21:56:00    -0.59
5   1999-01-27 23:00:00 1999-01-27 22:56:00 KORD    19990127    23:00:00    22:56:00    -0.59

请注意,如果您希望将多个列合并为一个日期列,则必须使用嵌套列表。 换句话说,parse_dates = [1,2]表示第二和第三列应分别解析为单独的日期列,而parse_dates = [[1,2]]意味着应将这两列解析为单个列。

还可以使用字典来指定自定义名称列:

date_spec = {'nominal':[1,2],'actual':[1,3]}
pd.read_csv(StringIO(tmp),header=None,parse_dates=date_spec)out:nominal actual  0   4
0   1999-01-27 19:00:00 1999-01-27 18:56:00 KORD    0.81
1   1999-01-27 20:00:00 1999-01-27 19:56:00 KORD    0.01
2   1999-01-27 21:00:00 1999-01-27 20:56:00 KORD    -0.59
3   1999-01-27 21:00:00 1999-01-27 21:18:00 KORD    -0.99
4   1999-01-27 22:00:00 1999-01-27 21:56:00 KORD    -0.59
5   1999-01-27 23:00:00 1999-01-27 22:56:00 KORD    -0.59

重要的是要记住,如果要将多个文本列解析为单个日期列,则在数据前添加一个新列。
index_col参数基于这组新列而不是原始数据列:

pd.read_csv(StringIO(tmp),header=None,parse_dates=date_spec,index_col=0)out:actual  0   4
nominal
1999-01-27 19:00:00 1999-01-27 18:56:00 KORD    0.81
1999-01-27 20:00:00 1999-01-27 19:56:00 KORD    0.01
1999-01-27 21:00:00 1999-01-27 20:56:00 KORD    -0.59
1999-01-27 21:00:00 1999-01-27 21:18:00 KORD    -0.99
1999-01-27 22:00:00 1999-01-27 21:56:00 KORD    -0.59
1999-01-27 23:00:00 1999-01-27 22:56:00 KORD    -0.59

注意:如果列或索引包含不可解析的日期,则整个列或索引将作为对象数据类型原样返回。 对于非标准日期时间解析,请在pd.read_csv之后使用to_datetime()。

注意:read_csv具有用于解析iso8601格式的日期时间字符串的fast_path,例如“ 2000-01-01T00:01:02 + 00:00”和类似的变体。 如果可以安排数据以这种格式存储日期时间,则加载时间将明显缩短,约20倍。

最后,解析器允许您指定自定义date_parser函数,以充分利用日期解析API的灵活性:

pd.read_csv(StringIO(tmp),header=None,parse_dates=date_spec,date_parser=pd.io.date_converters.parse_date_time)out:nominal actual  0   4
0   1999-01-27 19:00:00 1999-01-27 18:56:00 KORD    0.81
1   1999-01-27 20:00:00 1999-01-27 19:56:00 KORD    0.01
2   1999-01-27 21:00:00 1999-01-27 20:56:00 KORD    -0.59
3   1999-01-27 21:00:00 1999-01-27 21:18:00 KORD    -0.99
4   1999-01-27 22:00:00 1999-01-27 21:56:00 KORD    -0.59
5   1999-01-27 23:00:00 1999-01-27 22:56:00 KORD    -0.59

skiprows

可以选择忽略前面的行数,通过下图可以对比使用skiprows前后的shape。

na_values

可以用来替换NA值

nrows

从文件开始时选取需要读取的行数。可以看到使用nrows=3之后,数据只有前三行。(df.head()默认读取前五行)

skipfooter

参考:
Python Pandas——Read_csv详解
【Python3】pandas.read_csv详解

python:pandas之read_csv相关推荐

  1. python pandas csv 追加 空行,python – Pandas:read_csv在空行后忽略行

    有一个奇怪的.csv文件,如: header1,header2,header3 val11,val12,val13 val21,val22,val23 val31,val32,val33 很好,但在这 ...

  2. Python pandas用法

    Python pandas用法 无味之味关注 12019.01.10 15:43:25字数 2,877阅读 91,914 介绍 在Python中,pandas是基于NumPy数组构建的,使数据预处理. ...

  3. python pandas 读写 csv 文件

    python pandas 读写 csv 文件 具体看官方文档 https://www.pypandas.cn/docs/user_guide/io.html#csv-文本文件 import pand ...

  4. 独家 | 浅谈Python/Pandas中管道的用法

    作者:Gregor Scheithauer博士 翻译:王闯(Chuck)校对:欧阳锦本文约2000字,建议阅读5分钟本文介绍了如何在Python/Pandas中运用管道的概念,以使代码更高效易读. 图 ...

  5. python pandas 把数据保存成csv文件,以及读取csv文件获取指定行、指定列数据

    文章目录: 1 数据说明 2 把数据集文件信息使用python pandas保存成csv文件 3 使用python pandas 读取csv的每行.每列数据 1 数据说明 1.在test_data目录 ...

  6. pandas用read_csv时编码问题解决

    在pandas用read_csv时,遇到编码错误的, 可带 encoding : str, default None Encoding to use for UTF when reading/writ ...

  7. csv 20位数据 如何打开可以预览完整数字_干货Python Pandas 做数据分析之玩转 Excel 报表分析...

    本篇文章选自作者在 GitChat 的分享,若有什么问题,可在公众号回复「小助手」添加小助手微信,邀请你进入技术交流群. 各位朋友大家好,非常荣幸和大家聊一聊用 Python Pandas 处理 Ex ...

  8. 使用python pandas dataframe学习数据分析

    ⚠️ Note - This post is a part of Learning data analysis with python series. If you haven't read the ...

  9. python移动平均线绘图_对python pandas 画移动平均线的方法详解

    数据文件 66001_.txt 内容格式: date,jz0,jz1,jz2,jz3,jz4,jz5 2012-12-28,0.9326,0.8835,1.0289,1.0027,1.1067,1.0 ...

最新文章

  1. GEO数据挖掘(1)引出
  2. 身份证号码有效性检测算法 ( js版 转 .net版 )
  3. 4. SQL Server数据库状态监控 - 作业状态
  4. nga能查服务器状态吗,NGAA
  5. linux安装mysql和使用c语言操作数据库的方法 c语言连接mysql
  6. win10电脑一开机提示拒绝访问怎么办
  7. bspline怎么使用 python_零基础5个月快速学会Python的秘诀
  8. 关于 FAT12 文件系统
  9. Android 外网远程连接真机进行开发调试
  10. 2020美团实习试题
  11. OpenCV像素点操作 图片特效
  12. C++ 工厂模式(Factory 模式)简介与实现
  13. PMP证书真的有用吗?
  14. 网站建设好但是访问不了的原因及解决方法
  15. 本地测试dubbo远程调用找不到provider
  16. linux_SIGCHLD信号-子进程回收
  17. 轻量级单元测试Cmockery源码学习 第一章
  18. Day9 :面向对象进阶
  19. Springboot 源码分析 —— @Endpoint 注解生效原理解析
  20. 城市公共数据治理初窥

热门文章

  1. 事务内容postgresql pgbench
  2. AS3 CookBook学习整理(十七)
  3. python绘图—— matplotlib
  4. 波卡链Substrate (7)Grandpa协议四“责任安全机制”
  5. 智能合约重构社会契约(9)Fabric
  6. 【Flask】自定义转换器
  7. 【python】算法引入及算法特性和时间复杂度
  8. optee3.14中MMU页表查询的所需配置--深入解读
  9. optee内核中malloc函数的原理介绍
  10. [optee]-optee中的异常向量表的实现