在线赌币机 用Pandas读取CSV,望这篇就够了

 

01 语法

基本语法如下,pd为导入Pandas模块的又名:

pd.read_csv(filepath_or_buffer: Union[str, pathlib.Path, IO[~AnyStr]],              sep=',', delimiter=None, header='infer', names=None, index_col=None,              usecols=None, squeeze=False, prefix=None, 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=False, 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: str = '.',              lineterminator=None, quotechar='"', quoting=0,              doublequote=True, escapechar=None, comment=None,              encoding=None, dialect=None, error_bad_lines=True,              warn_bad_lines=True, delim_whitespace=False,              low_memory=True, memory_map=False, float_precision=None) 

清淡情况下,会将读取到的数据返回一个DataFrame,自然遵命参数的请求会返回指定的类型。

02 数据内容

filepath_or_buffer为第一个参数,异国默认值,也不及为空,根据Python的语法,第一个参数传参时能够不写参数名。能够传文件路径:

# 声援文件路径或者文件缓冲对象  # 本地相对路径  pd.read_csv('data/data.csv') # 仔细现在录层级  pd.read_csv('data.csv') # 倘若文件与代码文件在联相符现在录下  pd.read_csv('data/my/my.data') # CSV文件的扩展名纷歧定是.csv  # 本地绝对路径  pd.read_csv('/user/gairuo/data/data.csv')  # 行使URL  pd.read_csv('https://www.gairuo.com/file/data/dataset/GDP-China.csv') 

必要仔细的是,Mac中和Windows中路径的写法纷歧样,上例是Mac中的写法,Windows中的相对路径和绝对路径必要别离换成相通'data\data.csv'和'E: \data\data.csv'的形态。另外,路径尽量不要行使中文,否则程序容易报错,这意味着你存放数据文件的现在录要尽量用英文命名。

能够传数据字符串,即CSV中的数据字符以字符串形态直接传入:

from io import StringIO  data = ('col1,col2,col3\n'          'a,b,1\n'          'a,b,2\n'          'c,d,3')  pd.read_csv(StringIO(data))  pd.read_csv(StringIO(data), dtype=object) 

也能够传入字节数据:

from io import BytesIO  data = (b'word,length\n'          b'Tr\xc3\xa4umen,7\n'          b'Gr\xc3\xbc\xc3\x9fe,5')  pd.read_csv(BytesIO(data)) 
03 分隔符

sep参数是字符型的,代外每走数据内容的分隔符号,默认是逗号,另外常见的还有制外符(\t)、空格等,根据数据的实际情况传值。

# 数据分隔符默认是逗号,能够指定为其他符号  pd.read_csv(data, sep='\t') # 制外符分隔tab  pd.read_table(data) # read_table 默认是制外符分隔tab  pd.read_csv(data, sep='|') # 制外符分隔tab  pd.read_csv(data,sep="(?<!a)\|(?!1)", engine='python') # 行使正则外达式 

pd.read_csv还挑供了一个参数名为delimiter的定界符,这是一个备选分隔符,是sep的又名,成绩和sep相通。倘若指定该参数,则sep参数失效。

04 外头

header参数声援整型和由整型构成的列外,指定第几走是外头,默认会自动揣摸把第一走行为外头。

pd.read_csv(data, header=0) # 第一走  pd.read_csv(data, header=None) # 异国外头  pd.read_csv(data, header=[0,1,3]) # 众层索引MultiIndex 
 仔细:倘若skip_blank_lines=True,header参数将无视空走和注解走, 所以header=0外示第一走数据而非文件的第一走。 05 列名

names用来指定列的名称,它是一个相通列外的序列,与数据逐一对答。倘若文件不包含列名,那么答该竖立header=None,列名列外中不批准有重复值。

pd.read_csv(data, names=['列1', '列2']) # 指定列名列外  pd.read_csv(data, names=['列1', '列2'], header=None) 
06 索引

index_col用来指定索引列,能够是走索引的列编号或者列名,倘若给定一个序列,则有众个走索引。Pandas不会自动将第一列行为索引,不指准时会自动行使以0最先的自然索引。

# 声援int、str、int序列、str序列、False,默认为None  pd.read_csv(data, index_col=False) # 不再行使首列行为索引  pd.read_csv(data, index_col=0) # 第几列是索引  pd.read_csv(data, index_col='年份') # 指定列名  pd.read_csv(data, index_col=['a','b']) # 众个索引  pd.read_csv(data, index_col=[0, 3]) # 按列索引指定众个索引 
07 行使片面列

倘若只行使数据的片面列,能够用usecols来指定,云云能够添快添载速度并降矮内存消耗。

# 声援相通列外的序列和可调用对象  # 读取片面列  pd.read_csv(data, usecols=[0,4,3]) # 按索引只读取指定列,与挨次无关  pd.read_csv(data, usecols=['列1', '列5']) # 按列名,列名必须存在  # 指定列挨次,其实是df的筛选功能  pd.read_csv(data, usecols=['列1', '列5'])[['列5', '列1']]  # 以下用callable手段能够纤巧指定挨次,in后面的是吾们要的挨次  pd.read_csv(data, usecols=lambda x: x.upper() in ['COL3', 'COL1']) 
08 返回序列

将squeeze竖立为True,倘若文件只包含一列,则返回一个Series,倘若有众列,则照样返回DataFrame。

# 布尔型,默认为False  # 下例只取一列,会返回一个Series  pd.read_csv(data, usecols=[0], squeeze=True)  # 有两列则照样df  pd.read_csv(data, usecols=[0, 2], squeeze=True) 
09 外头前缀

倘若原首数据异国列名,能够指定一个前缀添序数的名称,如n0、n1,经过prefix参数指定前缀。

# 格式为字符型str  # 外头为c_0、c_2  pd.read_csv(data, prefix='c_', header=None) 
10 处理重复列名

倘若该参数为True,当列名有重复时,解析列名将变为X, X.1, …, X.N,而不是X, …, X。倘若该参数为False,那么当列名中有重复时,前线将会被后列遮盖。

# 布尔型,默认为True  data = 'a,b,a\n0,1,2\n3,4,5'  pd.read_csv(StringIO(data), mangle_dupe_cols=True)  # 外头为a b a.1  # False会报ValueError舛讹 
11 数据类型 
dtype能够指定各数据列的数据类型。  # 传入类型名称,或者以列名为键、以指定类型为值的字典  pd.read_csv(data, dtype=np.float64) # 一切数据均为此数据类型  pd.read_csv(data, dtype={'c1':np.float64, 'c2': str}) # 指定字段的类型  pd.read_csv(data, dtype=[datetime, datetime, str, float]) # 挨次指定 
12 引擎

行使的分析引擎能够选择C或Python。C说话的速度最快,Python说话的功能最为完善,清淡情况下,不必要另走指定。

# 格式为engine=None,其中可选值有{'c', 'python'}  pd.read_csv(data, engine='c') 
13 列数据处理

行使converters参数对列的数据进走转换在线赌币机,参数中指定列名与针对此列的处理函数,最后以字典的形态传入,字典的键能够是列名或者列的序号。

# 字典格式,默认为None  data = 'x,y\na,1\nb,2'  def foo(p):      return p+'s'  # x行使函数,y行使lambda  pd.read_csv(StringIO(data), converters={'x': foo,                                          'y': lambda x: x*3})  # 行使列索引  pd.read_csv(StringIO(data),              converters={0: foo, 1: lambda x: x*3}) 
14 真伪值转换

行使true_values和false_values将指定的文本内容转换为True或False,能够用列外指定众个值。

# 列外,默认为None  data = ('a,b,c\n1,Yes,2\n3,No,4')  pd.read_csv(StringIO(data),              true_values=['Yes'], false_values=['No']) 
15 跳过指定走

如下跳过必要无视的走数(从文件最先处算首)或必要无视的走号列外(从0最先):

# 相通列外的序列或者可调用对象  # 跳过前三走  pd.read_csv(data, skiprows=2)  # 跳过前三走  pd.read_csv(data, skiprows=range(2))  # 跳过指定走  pd.read_csv(data, skiprows=[24,234,141])  # 跳过指定走  pd.read_csv(data, skiprows=np.array([2, 6, 11]))  # 隔走跳过  pd.read_csv(data, skiprows=lambda x: x % 2 != 0) 

尾部跳过,从文件尾部最先无视,C引擎不声援。

# int类型, 默认为0  pd.read_csv(filename, skipfooter=1) # 末了一走不添载 

skip_blank_lines指定是否跳过空走,倘若为True,则跳过空走,否则数据记为NaN。

# 布尔型,默认为True  # 不跳过空走  pd.read_csv(data, skip_blank_lines=False) 

倘若skip_blank_lines=True,header参数将无视空走和注解走, 所以header=0外示第一走数据而非文件的第一走。

16 读取指定走

nrows参数用于指定必要读取的走数,从文件第一走算首,频繁用于较大的数据,先取片面进走代码编写。

# int类型,默认为None  pd.read_csv(data, nrows=1000) 
17 空值替换

na_values参数的值是一组用于替换NA/NaN的值。倘若传参,必要指定特定列的空值。以下值默认会被认定为空值:

['-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN',   '#N/A N/A', '#N/A', 'N/A', 'n/a', 'NA',   '#NA', 'NULL', 'null', 'NaN', '-NaN',   'nan', '-nan', ''] 

行使na_values时必要关注下面keep_default_na的相符作行使和影响:

# 可传入标量、字符串、相通列外序列和字典,默认为None  # 5和5.0会被认为是NaN  pd.read_csv(data, na_values=[5])  # ?会被认为是NaN  pd.read_csv(data, na_values='?')  # 空值为NaN  pd.read_csv(data, keep_default_na=False, na_values=[""])  # 字符NA和字符0会被认为是NaN  pd.read_csv(data, keep_default_na=False, na_values=["NA", "0"])  # Nope会被认为是NaN pd.read_csv(data, na_values=["Nope"])  # a、b、c均被认为是NaN,等于na_values=['a','b','c']  pd.read_csv(data, na_values='abc')  # 指定列的指定值会被认为是NaN  pd.read_csv(data, na_values={'c':3, 1:[2,5]}) 
18 保留默认空值

分析数据时是否包含默认的NaN值,是否自动识别。倘若指定na_values参数,并且 keep_default_na=False,那么默认的NaN将被遮盖,否则增补。keep_default_na和na_values的有关见外3-2。

▼外3-2 keep_default_na和na_values的取值逻辑有关

 表明:倘若na_filter为False(默认为True),那么keep_default_na和na_values参数均无效。 
# 布尔型,默认为True  # 不自动识别空值  pd.read_csv(data, keep_default_na=False) 

na_filter为是否检查丢失值(空字符串或空值)。对于大文件来说,数据荟萃异国空值,设定na_filter=False能够升迁读取速度。

# 布尔型,默认为True  pd.read_csv(data, na_filter=False) # 不检查 
19 日期时间解析

日期时间解析器参数date_parser用于解析日期的函数,默认行使dateutil.parser.parser来做转换。

倘若为某些或一切列启用了parse_dates,并且datetime字符串的格式都相通,则经过竖立infer_datetime_format=True,能够大大挑高解析速度,pandas将尝试揣摸datetime字符串的格式,然后行使更快的手段解析字符串,从而将解析速度挑高5~10倍。倘若无法对整列做出切确的揣摸解析,Pandas将返回到平常的解析模式。

下面是一些可自动揣摸的日期时间字符串示例,它们都外示2020年12月30日00:00:00:

 "20201230"  "2020/12/30"  "20201230 00:00:00"  "12/30/2020 00:00:00"  "30/Dec/2020 00:00:00"  "30/December/2020 00:00:00" 
# 解析时间的函数名,默认为None  # 指准时间解析库,默认是dateutil.parser.parser  date_parser = pd.io.date_converters.parse_date_time date_parser = lambda x: pd.to_datetime(x, utc=True, format='%d%b%Y')  date_parser = lambda d: pd.datetime.strptime(d, '%d%b%Y')  # 行使  pd.read_csv(data, parse_dates=['年份'], date_parserdate_parser=date_parser) 

parse_dates参数用于对时间日期进走解析。

# 布尔型、整型构成的列外、列外构成的列外或者字典,默认为False  pd.read_csv(data, parse_dates=True) # 自动解析日期时间格式  pd.read_csv(data, parse_dates=['年份']) # 指定日期时间字段进走解析  # 将第1、4列相符并解析成名为“时间”的时间类型列  pd.read_csv(data, parse_dates={'时间':[1,4]}) 

倘若infer_datetime_format被设定为True并且parse_dates可用,那么Pandas将尝试转换为日期类型。

# 布尔型,默认为False  pd.read_csv(data, parse_dates=True, infer_datetime_format=True) 

倘若用上文中的parse_dates参数将众列相符并并解析成一个时间列,竖立keep_date_col的值为True时,会保留这些原有的时间构成列;倘若竖立为False,则不保留这些列。

# 布尔型,默认为False  pd.read_csv(data, parse_dates=[[1, 2], [1, 3]], keep_date_col=True) 

对于DD/MM格式的日期类型,如日期2020-01-06,倘若dayfirst=True,则会转换成2020-06-01。

# 布尔型,默认为False  pd.read_csv(data, dayfirst=True, parse_dates=[0]) 

cache_dates倘若为True,则行使唯一的转换日期缓存来行使datetime转换。解析重复的日期字符串,尤其是带未必区偏移的日期字符串时,能够会大大挑高速度。

# 布尔型,默认为True  pd.read_csv(data, cache_dates=False) 
20 文件处理

以下是一些对读取文件对象的处理手段。iterator参数倘若竖立为True,则返回一个TextFileReader对象,并能够对它进走迭代,以便逐块处理文件。

# 布尔型,默认为False  pd.read_csv(data, iterator=True)  chunksize指定文件块的大幼,分块处理大型CSV文件。  # 整型,默认为None  pd.read_csv(data, chunksize=100000)  # 分块处理大文件  df_iterator = pd.read_csv(file, chunksize=50000)  def process_dataframe(df):      pass      return processed_df  for index,df_tmp in enumerate(df_iterator):      df_processed = process_dataframe(df_tmp)      if index > 0:         df_processed.to_csv(path)      else:         df_processed.to_csv(path, mode='a', header=False) 

compression(压缩格式)用于对磁盘数据进走即时解压缩。倘若为“infer”,且filepath_or_buffer所以.gz、.bz2、.zip或.xz末了的字符串,则行使gzip、bz2、zip或xz,否则不进走解压缩。倘若行使zip,则ZIP文件必须仅包含一个要读取的数据文件。竖立为None将不进走解压缩。

# 可选值有'infer'、'gzip'、'bz2'、'zip'、'xz'和None,默认为'infer'  pd.read_csv('sample.tar.gz', compression='gzip') 

encoding(编码)指定字符集类型,清淡指定为'utf-8'。

# 字符型,默认为None  pd.read_csv('gairuo.csv', encoding='utf8')  pd.read_csv("gairuo.csv",encoding="gb2312") # 常见中文 
21 符号

以下是对文件中的一些数据符号进走的稀奇识别处理。如下竖立千分位分隔符thousands:

# 字符型,默认为None  pd.read_csv('test.csv', thousands=',') # 逗号分隔 

幼批点decimal,识别为幼批点的字符。

# 字符串,默认为'.'  pd.read_csv(data, decimal=",") 

走终结符lineterminator,将文件分成几走的字符,仅对C解析器有效。

# 长度为1的字符串,默认为None  data = 'a,b,c~1,2,3~4,5,6'  pd.read_csv(StringIO(data), lineterminator='~') 

引号quotechar,用于外示引用数据的最先和终结的字符。引用的项现在能够包含定界符,它将被无视。

# 长度为1的字符串  pd.read_csv(file, quotechar='"') 

在csv模块中,数据能够会用引号等字符包裹首来,quoting参数用来限制识别字段的引号模式,它能够是Python csv模块中的csv.QUOTE_*常量,也能够传入对答的数字。各个传入值的意义如下。

 0或csv.QUOTE_MINIMAL:仅稀奇字段有引号。  1或csv.QUOTE_ALL:一切字段都有引号。  2或csv.QUOTE_NONNUMERIC:一切非数字字段都有引号。  3或csv.QUOTE_NONE:一切字段都异国引号。

倘若行使csv模块,则必要事先引入csv模块。

# 整型或者csv.QUOTE_*实例, 默认为0  import csv  pd.read_csv('input_file.csv', quoting=csv.QUOTE_NONE) 

双引号doublequote,当单引号已经被定义,并且quoting参数不是QUOTE_NONE的时候,行使双引号外示将引号内的元素行为一个元素行使。

# 布尔型,默认为True  import csv  pd.read_csv('data.csv', quotechar='"', doublequote=True, quoting=csv.QUOTE_NONNUMERIC) 

escapechar能够传入一个转义符,用于过滤数据中的该转入符。比如,倘若一走用双引号包裹着的数据中有换走符,用以下代码能够过滤其中的换走符。

# 长度为1的转义字符串,默认为None  pd.read_csv(StringIO(data), escapechar='\n', encoding='utf-8') 

注解标识comment,指使不该分析走的片面。倘若在一走的起头找到该标识,则将十足无视该走。此参数必须是单个字符。像空走相通(只要skip_blank_lines = True),注解的走将被参数header无视,而不是被skiprows无视。例如,倘若comment ='#',则解析header=0的'#empty \ na,b,c \ n1,2,3'会将'a,b,c'视为header。

# 字符串,默认为None  s = '# notes\na,b,c\n# more notes\n1,2,3'  pd.read_csv(StringIO(s), sep=',', comment='#', skiprows=1) 

空格分隔符delim_whitespace,指定是否将空格(例如''或'\ t')用作分隔符,等效于竖立sep ='\s+'。倘若此选项竖立为True,则不该该为delimiter参数传递任何内容。

# 布尔型,默认为False  pd.read_csv(StringIO(data), delim_whitespace=False) 
22 幼结

经过本文的介绍,吾们晓畅了读取CSV文件的一些参数的功能,也晓畅了在读取CSV文件时能够做一些初步的数据清理做事。

【编辑保举】在线赌币机

2021年超酷的 10 个大数据工具!你清新几个? 大数据为乡下崛首注入新动力 为网络与云端大数据降本挑速 赛灵思推出Versal HBM自适宜计算添速平台 大数据内训分享视频课程【动态更新】 数百名大数据工程师齐聚快手 共享周围数据建设经验