数据分析学习(四)pandas数据的读取和展示

第四章pandas数据的读取和显示

4.1数据读取

在日常生活中我们的数据常常被保存在数据库或者文本文件中,常用的文件格式有*.csv*、.txt和Excel表格。对于多种多样的数据来源和格式,pandas库提供了很多方便的读取API。本文接下来对上述三种文件格式的数据读取进行详解。

4.1.1CSV文件读取

4.1.1.1CSV格式简介

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。

例如,一个用户可能需要交换信息,从一个以私有格式存储数据的数据库程序,到一个数据格式完全不同的电子表格。最可能的情况是,该数据库程序可以导出数据为“CSV”,然后被导出的CSV文件可以被电子表格程序导入。

4.1.1.2读取CSV文件

现实世界的数据是繁多的,且通常是杂乱无章的。尽管有通用的CSV格式,但就如同MarkDown语法一样,各家都会在基础语法上添加属于自己独有的语法。这就导致用来处理CSV文件的方法read_csv()有大量的参数,在pandas1.2.4版本中,该方法就有超过50个参数,所以本文只会专注于重要、常用的参数讲解,不会详解每一个参数。

方法1read_csv()

read_csv(filepath_or_buffer, 
		sep=<object object>, 
		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='.', 
		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, 
		storage_options=None)

参数说明

重要参数1:filepath_or_buffer:指定数据路径

重要参数2:sep:指定分割符,默认是逗号,C引擎不能自动检测分隔符,但Python解析引擎可以

重要参数3:delimiter:同sep参数,指定分隔符

重要参数4:header:指定第几行作为列名,如果没有指定列名,默认header=0

重要参数5:names:指定列名,如果文件中不包含header的行,应该显性表示header=None

重要参数6:index_col:指定用作的行标签的列,默认None,即线性标签

重要参数7:usecols :指定使用的列的名称或者序号,最后结果会返回列的子集,默认None

重要参数8:squeeze:布尔型,指定在只有一列的情况下返回Series实例,默认为False

重要参数9:prefix:字符型,指定在没有标题时添加到列号的前缀,默认为none

重要参数10:mangle_dupe_cols:指定当遇到重复列时重复的列将被指定为“ X”,“ X.1”,……“ X.N”,默认为True

重要参数11:dtype:指定数据或列的数据类型,例如{‘a’:np.float64,‘b’:np.int32,‘c’:‘Int64’}指定abc散列不同的数据类型

重要参数12:engine:指定选择读取的引擎,可选{‘c’, ‘python’},两者的一些性能是不同的

​ C:指定使用C引擎

​ pyhton:指定使用python引擎

重要参数13:skipinitialspace:布尔型,指定忽略分隔符后的空格,默认false

重要参数14:skiprows:指定在文件开始处要跳过的行号或要跳过的行数

重要参数15:skip_footer:指定要跳过的文件底部的行数

重要参数16:nrows:整数型,指定读取的行数

重要参数17:na_filter:布尔型,指定是否打开缺失值过滤器,默认为True

重要参数18:skip_blank_lines:指定是否跳过空白行且不解释为NA,默认为True,跳过blank lines 而且不是定义为NAN

重要参数19:thousands:指定千分位符号,默认“,”

重要参数20:decimal:指定识别为小数点的字符

重要参数21:encoding::指定读写时的编码方式

重要参数22:na_values:指定被视为缺失值NA或者NaN的值

重要参数22:error_bad_lines:布尔型,制定是否删除具有太多字段的行,即逗号太多的行,默认True

重要参数23:warn_bad_lines:布尔型,指定在error_bad_lines=False的情况下给出每一个多字段行的警告

重要参数24:true_values:指定被视为True的值

重要参数25:false_values:指定被视为False的值


正确示例1:读取CSV文件,不传递任何参数,行索引为线性索引,第一行作为表头。

#读取CSV文件,不传递任何参数,行索引为线性索引,第一行作为表头。
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014 .csv')
df.head()

正确示例1结果
不传递参数
正确示例2:传递col_index=0,将Date列作为行索引,第一行作为表头,接下来的程序默认传递col_index=0,对此不会再进行说明。

#读取CSV文件,传递indexcol=0,将Date列作为行索引
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014 .csv', index_col=0)
df.head()

正确示例2结果
传递index_col=0
正确示例3:传递header=1,将第二行作为列标签。

#读取CSV文件,传递`header=1`,将第二行作为列标签。
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014test.csv', index_col=0, header=1)
df.head()

正确示例3结果
传递header=1
正确示例4:传递header=0names=list('abcdefg'),指定列标签为abcdefg。

#传header=0`和names=list('abcdefg'),指定列标签为abcdefg。
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014test.csv', index_col=0, header=0, names=list('abcdefg'))
df.head()

正确示例4结果
names=list('abcdefg')
正确示例5:传递prefix=X.,同时传递header=None指定列标签前缀为’X.’。

#传递prefix=X.,指定列标签前缀
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014test.csv', index_col=0, prefix='X.', header=None)
df.head()

正确示例5结果
传递prefix参数
错误示例1:指定列标签前缀,但是header!=None,会引发ValueError。

#传递prefix=X.错误示例,指定列标签前缀,但是header!=None,会引发ValueError: Argument prefix must be None if argument header is not None
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014test.csv', index_col=0, prefix='X.')
df.head()

错误示例1结果
错误示例
正确示例6:传递usecols=[0, 1, 2]获取只包含前三列的子集。

#传递usecols=[0, 1, 2]获取只包含前三列的子集
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014test.csv', index_col=0, usecols=[0, 1, 2])
df.head()

正确示例6结果
传递usecols参数
正确示例6对比示例:传递usecols=[0, 1, 2],不传递index_col=0,发现date列成为了子集的一部分,这引发了一个问题是先取子集再设置索引还是先设置索引再取子集,所以我们做了第二个对比试验。

#传递usecols=[0, 1, 2]对比示例,不传递index_col=0
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014test.csv', usecols=[0, 1, 2])
df.head()

正确示例6对比示例结果
对比示例
正确示例6对比示例2:不传递index_col=0,传递usecols=[2, 3, 4],从下图我们可以得出结论是先进行子集的切割在进行轴索引的设置。

#对比示例2,不传递index_col=0,传递usecols=[2, 3, 4]
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014test.csv', usecols=[2, 3, 4], index_col=0)
df.head()

正确示例6对比示例2结果
对比示例2
正确示例7:传递skiprows=lambda x: x % 2 != 0,跳过所有奇数行。

#传递skiprows=lambda x: x % 2 != 0,跳过所有奇数行
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014test.csv', index_col=0, skiprows=lambda x: x % 2 != 0)
df.head()

正确示例7结果
传递skiprows参数
正确示例8:传递nrows=2,只读取前两行数据。

#传递nrows=2只读取两行
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014test.csv', index_col=0, nrows=2)
df.head()

正确示例8结果
传递nrows参数
正确示例9:传递dtype=dict()指定第一列数据是字符型,第二列数据是浮点型,第三列数据是整数型。

#传递dtype参数指定第一列数据是字符型,第二列数据是浮点型,第三列数据是整数型
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014test.csv', index_col=0, dtype={'Temperature(Celsius)(high)': np.str, 'Temperature(Celsius)(avg)': np.float32, 'Temperature(Celsius)(low)': np.int32})
df.head()

正确示例9结果
传递dtype参数
正确示例10:传递na_values=12,将数值12定义为额外缺失值。

#传递na_values=12,将数值12定义为额外缺失值
df = pd.read_csv('E:\postgraduate\document\csv数据集\Beijing2014test.csv', index_col=0, na_values=12)
df.head()

正确示例10结果
传递na_values参数


4.1.2 Excel文件的读取

Microsoft Excel是电子试算表程序,他的最大特点就是表,一张表是一组数据,每个数据存放在一个cell里头。这样做的好处就是我们没必要纠结于分隔符的选择,仅仅以位置信息就可以所引出想要的数据。通常我们使用xlrd和xlwt两个第三方库进行读写,此外像Numpy或者pandas这样的数据统计库都会有自己的读取API。

4.1.2.1读取Excel文件

方法1read_excel()方法。

read_excel(io, sheet_name=0, header=0, names=None, 
			index_col=None, usecols=None, squeeze=False, 
			dtype=None, engine=None, converters=None, true_values=None, 
			false_values=None, skiprows=None, nrows=None, na_values=None, 
			keep_default_na=True, na_filter=True, verbose=False, 
			parse_dates=False, date_parser=None, thousands=None, 
			comment=None, skipfooter=0, convert_float=True, 
			mangle_dupe_cols=True, storage_options=None)

参数说明
参数1:io:指定文件路径

参数2:sheet_name:指定要读取的工作表名称或索引号,默认0

参数3:header:整数型,指定用于列标签的行,默认0

参数4:names:指定header=None时列标签的名称,默认None

参数5:index_col:指定用作的行标签的列,默认None,即线性标签

参数6:usecols :指定使用的列的名称或者序号,最后结果会返回列的子集,默认None

参数7:squeeze:布尔型,指定在只有一列的情况下返回Series实例,默认为False

参数8:dtype:指定数据或列的数据类型,例如{‘a’:np.float64,‘b’:np.int32,‘c’:‘Int64’}指定abc散列不同的数据类型

参数9:engine:指定选择读取的引擎,可选{‘c’, ‘python’},两者的一些性能是不同的

​ C:指定使用C引擎

​ pyhton:指定使用python引擎

参数10:true_values:指定被视为True的值

参数11:false_values:指定被视为False的值

参数12:skiprows:指定在文件开始处要跳过的行号或要跳过的行数

参数13:nrows:整数型,指定读取的行数

参数14:na_values:指定被视为缺失值NA或者NaN的值

参数15:na_filter:布尔型,指定是否打开缺失值过滤器,默认为True

参数16:verbose:布尔型,指示放置在非数字列中的NA值的数量

参数17:thousands:指定千分位符号,默认“,”

参数18:skipfooter:指定要跳过的文件底部的行数

参数19:convert_float:布尔型,指定是否将浮点数变换为整数

参数20:mangle_dupe_cols:指定当遇到重复列时重复的列将被指定为“ X”,“ X.1”,……“ X.N”,默认为True


ps1:read_excel和read_csv两者的参数很接近,在此就不给出示例了,需要注意的就是sheet_name参数可以进行任意页读取。


4.2数据展示

4.2.1查看部分数据

方法1head(nrow)方法。
正确示例1:传递nrow=3查看前三行数据。

#展示部分数据方法1:使用head(nrows)方法,出来的nrows=3查看前三行
df.head(3)

正确示例1结果
head(3)
正确示例2:不传递任何参数默认查看前5行。

df.head()

正确示例2结果
查看前5行
方法2:使用各种切片方法。
正确示例1:切片详见数据分析学习(二),这里只是单纯给出示例。

#展示部分数据方法2:使用各种切片方法
df.iloc[:4]

正确示例1结果
切片方法查看前4行

ps1:head方法的底层就是return self.iloc[:n]使用了iloc方法,本质上来说head就是一个iloc的包装方法。


4.2.2查看数据统计信息

方法1describe()方法。
正确示例1:使用describe方法查看最大值、最小值、4分位数、均值、标准差和数量。

#使用describe方法查看最大值、最小值、4分位数、均值、标准差和数量
df.describe()

正确示例1结果
describe方法
方法2:将describe方法拆开进行使用。
正确示例1:使用.mean()方法查看每一列平均数。

#使用.mean()方法查看每一列平均数。
df.mean()

正确示例1结果
查看平均数
ps1:describe方法是一种整合方法,他的本质是d = ([data.count() + data.mean(), data.min()] + data.quantile(percentiles).tolist() + [data.max()])这句话,是多个函数的叠加产物,所以如果不想使用describe方法的话,拆开使用也是没问题的。


4.2.3查看数据属性

4.2.3.1查看数据个数

方法1.size属性。
正确示例1:查看DataFrame的size属性获得该实例的元素个数。

#查看DataFrame的size属性获得该实例的元素个数
df.size

正确示例1结果
size属性
方法2.count()方法。
正确示例1:使用count方法查看每一列的元素数量统计。

#使用count方法查看每一列元素数量
df.count()

正确示例1结果
count方法
正确示例1对比示例:DataFrame中的缺失值是不统计在内的,修改部分数据为缺失值NaN,则统计结果会发生改变。

#修改部分数据为缺失值NaN
df.iloc[:-5] = np.NaN
df.count()

对比示例结果
缺失值对比示例
ps1:count方法不会统计缺失值,但是size属性会统计缺失值。

4.2.3.2查看数据各个属性
4.2.3.2.1查看数据形状

方法1.shape属性。
正确示例1:使用DataFrame示例的shape属性查看数据长宽。

#使用DataFrame示例的shape属性查看数据长
df.shape

正确示例1结果
shape属性

4.2.3.2.2产看数据两个维度轴

方法1.axes属性。
正确示例1:使用axes属性查看DataFrame两个轴,或者说两个维度信息,列表第一个值是行索引列表,第二个值是列标签列表。

#使用axes属性查看DataFrame两个轴,或者说两个维度
df.axes

正确示例1结果
axes属性
方法2.index属性。
正确示例1:使用index属性查看DataFrame行索引,返回值不是列表实例,而是pandas独有的Index实例。

#使用index属性查看DataFrame行索引
df.index

正确示例1结果
index属性
方法3.columns属性。
正确示例1:使用columns属性查看DataFrame列标签,返回值不是列表实例,同样是pandas独有的Index实例。

#使用columns属性查看DataFrame列标签
df.columns

正确示例1结果
columns属性

4.2.3.2.3查看数据维数

方法1.ndim属性。
正确示例1:使用ndim属性查看DataFrame维数,实质上这是个固定值,DataFrame实例返回2,Series实例返回1。

#查看DataFrame维数
df.ndim

正确示例1结果
ndim属性

4.2.3.2.4查看数据元素类型

方法1.dtypes属性。
正确示例1:使用dtypes属性查看每列元素类型,假设一列中是混合类型可能会返回object类型。

#使用dtypes属性产看每列元素类型
df.dtypes

正确示例1结果
dtypes属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猪猪家的大猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值