Pandas.read_csv()函数及全部参数使用方法一文详解+实例代码(上)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: Pandas.read_csv()函数及全部参数使用方法一文详解+实例代码

前言


Pandas常用作数据分析工具库以及利用其自带的DataFrame数据类型做一些灵活的数据转换、计算、运算等复杂操作,但都是建立在我们获取数据源的数据之后。因此作为读取数据源信息的接口函数必然拥有其强大且方便的能力,在读取不同类源或是不同类数据时都有其对应的read函数可进行先一步处理,这会减少我们相当大的一部分数据处理操作。每一个read()函数,作为一名数据分析师我个人认为都应该掌握且熟悉它对应的参数,相对应的read()函数博主已有三篇文章详细解读了read_json、read_excel和read_sql:


Pandas获取SQL数据库read_sql()函数及参数一文详解+实例代码


Pandas处理JSON文件read_json()一文详解+代码展示


Pandas中read_excel函数参数使用详解+实例代码


纵观整个数据源路径来看,最常用的数据存储对象:SQL、JSON、EXCEL以及这次要详解的CSV都遍及全了。 如果能够懂得该函数参数的使用可以减少大量后续处理DataFrame数据结构的代码,仅需要设置几个read_csv参数就可实现,因此本篇文章初衷为详细介绍并运用此函数来达到彻底掌握的目的。希望读者看完能够提出问题或者看法,博主会长期维护博客做及时更新,希望大家喜欢。


这里拿脱敏后的user_info.csv文件作为展示:

image.png


一、基础语法与功能


read_csv基础语法格式为:


pandas.read_csv(filepath_or_buffer, 
                sep=NoDefault.no_default, 
                delimiter=None, 
                header='infer', 
                names=NoDefault.no_default, 
                index_col=None, 
                usecols=None, 
                squeeze=None, 
                prefix=NoDefault.no_default, 
                mangle_dupe_cols=True, 
                dtype=None, 
                engine=None, 
                converters=None, 
                true_values=None, 
                false_values=None, 
                skipinitialspace=False, 
                skiprows=None, 
                skipfooter=0, 
                nrows=None, 
                na_values=None, 
                keep_default_na=True, 
                na_filter=True, 
                verbose=False, 
                skip_blank_lines=True, 
                parse_dates=None, 
                infer_datetime_format=False, 
                keep_date_col=False, 
                date_parser=None, 
                dayfirst=False, 
                cache_dates=True, 
                iterator=False, 
                chunksize=None, 
                compression='infer', 
                thousands=None, 
                decimal='.', 
                lineterminator=None, 
                quotechar='"', 
                quoting=0, 
                doublequote=True, 
                escapechar=None, 
                comment=None, 
                encoding=None, 
                encoding_errors='strict', 
                dialect=None, 
                error_bad_lines=None, 
                warn_bad_lines=None, 
                on_bad_lines=None, 
                delim_whitespace=False, 
                low_memory=True,
                memory_map=False, 
                float_precision=None, 
                storage_options=None)

可以看到参数是相当多的,比起read_excel、read_json和read_sql加起来还要多。说明了使用csv文件存储数据的频率是其他记录数据文件的几倍之高,因此关于csv文件的处理参数也会有如此之多。这是好事,等到我们将csv文件转换为了DataFrame数据再处理时,就需要写很多代码去处理,提供了这么多参数可以大大加快我们处理文件的效率。


read_csv的基本功能就是将csv文件转化为DataFrame或者是TextParser,还支持可选地将文件迭代或分解为块。

import numpy as np
import pandas as pd
df_csv=pd.read_csv('user_info.csv')

0305af83a3fb4a5bb047566fc355cdf9.png


二、参数说明和代码演示


以下为官方文档,文字实在是太多了推荐直接点目录看:

pandas.read_csv

首先我们将逐个了解每个参数的功能和作用,在了解参数意义后再进行实例使用。


1.filepath_or_buffer


接受类型:{str, path object or file-like object}字符串(一般为文件名且在当前运行程序的目录下才能读取到)、文件路径(一般推荐为绝对路径)、或者为其他可引用的数据类型。如url,http这种类型。


此参数为指定读入文件的路径。可以接受任何有效的字符串路径。字符串可以是URL。有效的URL包括http、ftp、s3、gs和文件。对于文件URL,本地文件可以是:file://localhost/path/to/table.csv.

如果要传入路径对象,pandas接受任何路径。

对于类文件对象,我们使用read()方法引用对象,例如文件句柄(例如通过内置的open函数)或StringIO。


df_csv=pd.read_csv('user_info.csv')
df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv')
df_csv=pd.read_csv('C:\\Users\\10799\\test-python\\user_info.csv')


2.sep


接受类型{str, default ‘,’}


csv文件一般默认是用','来分隔每个字符串的,而sep就是指定分隔的符号是什么类型。


如果sep为None,则C引擎无法自动检测分隔符,但Python解析引擎可以,这意味着Python的内置嗅探器工具csv将使用后者并自动检测分隔符。此外,长度超过1个字符且与“\s+”不同的分隔符将被解释为正则表达式,并将强制使用Python解析引擎。请注意regex分隔符容易忽略引用的数据。regex正则表达式示例:“\r\t”。

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',sep=',')
df_csv

6f1ff7be898f48e38ac020d489ccbb6f.png

对于sep字符可以参照转义字符:


转义字符 描述

\(在行尾时) 续行符

\\ 反斜杠符号

\‘ 单引号

\” 双引号

\a 响铃

\b 退格(Backspace)

\e 转义

\000 空

\n 换行

\v 纵向制表符

\t 横向制表符

\r 回车

\f 换页

\oyy 八进制数yy代表的字符,例如:\o12代表换行

\xyy 十进制数yy代表的字符,例如:\x0a代表换行

\other 其它的字符以普通格式输出


df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',sep='/t')

e158b49d2e2a4a8499b4dbb74a2b3e73.png


这样不再重复实验,有兴趣的大家可以自行尝试。


3.delimiter


接受类型:{str, default None

sep的别名,可以设置为想要名字,没有什么很大的意义。


df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',delimiter=',')
df_csv


048ffea3edb2415ba31f12d3b400e1f6.png


4.header


接受类型:{int, list of int, None, default ‘infer’}整数、整数列表、None。默认为infer


指定要用作列名的行号,以及数据的开头。默认行为是推断列名:如果未传递任何名称,则行为与header=0相同,并且从文件的第一行推断列名,如果显式传递列名,则行为与header=None相同。显式传递header=0,以便能够替换现有名称。标题可以是整数列表,指定列上多索引的行位置,例如[0,1,3]。将跳过未指定的中间行(例如,跳过本例中的2)。请注意,如果skip_blank_lines=True,此参数将忽略注释行和空行,因此header=0表示数据的第一行,而不是文件的第一行。

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',header=1)

dec6cb75c11245b19f218a87dacff755.png

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',header=[0,1,3])

110ebf5d9de7495c82f09ae9a4f81f1e.png


5.names


接受类型:{array-like, optional}


指定要使用的列名列表。如果文件包含标题行,则应显式传递header=0以覆盖列名。此列表中不允许重复。


df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',
header=0,names=['id','time','name1','name2','name3','name4','name5','name6'])

f7f2bc9135d94e16acf7bfbbd72dbb6f.png

6.index_col

接受类型:{int, str, sequence of int / str, or False, optional}默认为None。


指定要用作DataFrame行标签的列,以字符串名称或列索引的形式给出。如果给定int/str序列,则使用多索引。

注意:index_col=False可用于强制pandas不使用第一列作为索引,例如,当您有一个格式错误的文件,每行末尾都有分隔符时。

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',index_col='user_id')

6f64331b97714c4ebdc9eb5276fd630b.png

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',index_col=0)

1776ac9729884b7b8202fac2370958cb.png

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',index_col=[1,'user_id'])

03f56b80e31147fa9c771f1dfe8f10a6.png


当index_col为False时,将不指定索引列。


7.usecols


接受类型:{list-like or callable, optional}


返回列的子集。如果为列表形式,则所有元素必须是位置元素(即文档列中的整数索引)或与用户在名称中提供的列名或从文档标题行推断的列名相对应的字符串。如果给定了names参数,则不考虑文档标题行。例如,像usecols参数这样的有效列表应该是[0、1、2]或['foo',bar',baz']。


指定的列表顺序是不给予考虑的,与原csv文件的列原始顺序一样,因此usecols=[0,1]与[1,0]相同。如果可调用,将根据列名计算可调用函数,返回可调用函数计算为True的名称。有效的可调用参数的一个示例是['AAA','BBB','DDD'中的lambda x:x.upper()。使用此参数可以加快解析时间并降低内存使用率。


df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',usecols=['age_month'])

18a154a3b7204243a249fb71a736acde.png

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',usecols=[0,2])


9514658fae784daf88b0e2db28e44e8b.png

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',
header=0,
names=['id','time','name1','name2','name3','name4','name5','name6'],
usecols=['id','name1'])

1aa5c032d2114af195e2034ce31e5305.png



df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',
usecols=['age_month','first_order_time'])

b03bc3b167f641989b1702c4b20e1e4b.png


可见给定的列表但生成的DataFrame的顺序是不会根据给的列表顺序改变的。


8.squeeze


接受类型:{bool, default False}

如果解析的数据只包含一列,则返回一个序列。

df_csv=pd.read_csv('user_info.csv',usecols=['age_month'],squeeze=True)


e80d5d9ebc334b7db55871c3eec1e87d.png


9.prefix


接受类型:{str, optional}

无标题时添加到列号的前缀,例如“X”表示X0,X1。

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',header=None,prefix='name')


da370c990f584f32914f15f1c653cc3b.png


10.mangle_dupe_cols


接受类型:{bool, default True}

重复列将指定为“X”、“X.1”、“X.N”,而不是“X”…“X”。如果列中有重复的名称,传入False将导致数据被覆盖。

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',header=0,names=['id','time','name1','name2','name3','name4','name5','name6'],mangle_dupe_cols=False)

ValueError: Setting mangle_dupe_cols=False is not supported yet

设置为False时现在还不支持。


11.dtype


接受类型:{Type name or dict of column -> type, optional}


指定数据或列的数据类型。例如:{‘a’: np.float64, ‘b’: np.int32, ‘c’: ‘Int64’} 。


将str或object与适当的na_values设置一起使用,以保留而不是解释数据类型。如果指定了转换器,则将应用INSTEAD而不是数据类型转换。


df_csv=pd.read_csv('user_info.csv')
df_csv.dtypes

853a8a5cd1d14e338929cced65765c52.png

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',dtype={'user_id':'str'})
df_csv.dtypes

a2d86bdb51944f89934390ac52c809e5.png


12.engine


接受类型:{‘c’, ‘python’, ‘pyarrow’}

指定要使用的解析器引擎。C和pyarrow引擎的速度更快,而python引擎目前的功能更加完整。多线程目前仅由pyarrow引擎支持。


time_start=time.time()
df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',engine='python')
time_end=time.time()
print('time cost',time_end-time_start,'s')

time cost 1.0299623012542725 s

time_start=time.time()
df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',engine='c')
time_end=time.time()
print('time cost',time_end-time_start,'s')


time cost 0.20297026634216309 s


13.converters


接受类型:{dict, optional}

用于转换某些列中的值的函数的功能。键可以是整数或列标签。

df_csv=pd.read_csv(r'C:\Users\10799\test-python\user_info.csv',converters={'city_num':lambda x:x})

d8d70c1650fa44c5b581f69b7c49338d.png


14.true_values


接受类型:{list, optional}

指定列表要视为真,当读出的csv太多时该参数会有BUG,读不出来:

df_csv=pd.read_csv('user_info.csv',true_values=['广州'])

这个广州没变,我也试了试很多值也没用,估计内部参数逻辑不适用大含量的csv数据。


b7ed7dec91f94e23a7130611d1c6a50d.png


跑个简单的就行:


from io import StringIO
data = ('a,b,c\n1,Yes,2\n3,No,4')
pd.read_csv(StringIO(data),
            true_values=['Yes'], false_values=['No'])

20737f7dfef948dfb5f85725439345c8.png


不推荐大家使用该参数来调TRUE,自己写个lambda函数或者replace是一样的,这个作用于全局会出问题。只有当某一列的数据全部出现在true_values + false_values里面,才会被替换。

目录
相关文章
|
26天前
|
存储 数据挖掘 索引
Pandas Series 和 DataFrame 常用属性详解及实例
Pandas 是 Python 数据分析的重要工具,其核心数据结构 Series 和 DataFrame 广泛应用。本文详细介绍了这两种结构的常用属性,如 `index`、`values`、`dtype` 等,并通过具体示例帮助读者更好地理解和使用这些属性,提升数据分析效率。
46 4
|
1月前
|
Python
|
1月前
|
Python
Pandas 常用函数-数据合并
Pandas 常用函数-数据合并
46 1
|
1月前
|
BI Python
Pandas 常用函数-数据统计和描述
Pandas 常用函数-数据统计和描述
126 0
|
1月前
|
Python
Pandas 常用函数-数据选择和过滤
Pandas 常用函数-数据选择和过滤
21 0
|
1月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
78 0
|
3月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
111 0
|
1月前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
49 2
|
2月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
100 3
|
2月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
50 1