文本文件是由若干行字符构成的计算机文件,csv是一种用分隔符分隔的文件格式,相对简单,比较通用,是以纯文本形式存储表格数据(数字和文本),应用于程序之间转移表格数据。
pandas中提供了两种函数来读取文本文件,分别是read_csv()和read_table()
常用参数:
filepath(文件路径)
sep(分隔符,csv默认为",",table默认为"Tab")
文本文件存储和读取类似,对于结构化数据,可以通过函数to_csv()实现
常用参数:
path_or_buf(代表文件路径,无默认)
sep(代表分隔符,默认为",")
对Excel文件的读取通过函数read_excel(‘文件路径’)来实现
对Excel文件的存储通过函数to_exel(‘存储路径’)来实现
读取函数:
read_sql_table()——只能读取数据库的某一个表格,没有查询功能
read_sql_query()——只能实现查询功能,不能直接读取数据库中的某个表
read_sql()————上两者结合,既能实现读取功能,又能实现查询功能
存储函数:
to_sql(‘数据库表名’)
DataFrame的基础属性有values(元素)、index(索引、行名)、columns(列名)、dtypes(类型),除了这四个基础属性外,还有size、ndim可以获取DataFrame的元素个数和维度数。
访问DataFrame中的数据有两种办法,第一种是使用字典访问内部数据的方式访问DataFrame单列数据,即使用函数detail[‘id’],id指所要访问的那一列,第二种是使用访问属性的方式访问DataFrame单列数据,为detail.id,id指所要访问的那一列。但使用第二种方法会引起程序混乱,也会使得代码晦涩难懂,因此不建议使用第二种方法。下面一个表格是使用detail[‘id’]访问DataFrame不同数据的不同表现形式。此外还有head()函数、tail()函数是专门用来DataFrame前n行或后n行数据的。
要求 | 代码(index_name:行名) | 举例 |
---|---|---|
获取单列多行数据 | detail['id_name][:n] | 获取id列前五行的数据——detail[‘id’][:5] |
获取多列多行数据 | detail[‘id_name1’, ‘id_name2’][m:n] | 获取id1列和id2列,第1~8行的数据—————————detail[‘id1’, ‘id2’][1:8] |
获取多行数据(所有列) | detail[:][m:n] | 获取第1~8行的数据——detail[:][1:8] |
获取前n行数据 | detail.head(n)(n默认5) | 获取前6行的数据——detail.head(6) |
获取后n行数据 | detail.tail(n)(n默认5) | 获取后6行的数据——detail.tail(6) |
**更改函数:**detail.loc[detail[‘order_id’] == ‘change’,‘order_id’]=‘bianhua’
loc()函数在下面会有描述,change代表需要更改的信息,bianhua代表的是更改之后的信息。需要注意,更改之后不能撤销。
增加函数:detail[‘新加列名’]=‘要增加的数据’,新加列的数据还可以用原有的数据进行计算。例如
detail[‘payment’] = detail[‘counts’] * detail[‘amounts’]
删除函数:drop(‘要删除的列或行索引’),
删除某列 | detail.drop(labels=‘pay’,axis=1,inplace=True) |
---|---|
删除m~n行 | detail.drop(labels=range(m:n),axis=0,inplace=True) |
loc()和iloc()函数可以更加灵活地实现数据访问
DataFrame.loc[行索引名称或条件, 列索引名称]
DataFrame.iloc[行索引位置, 列索引位置]
二者的区别在于[ ]内添加的元素不一样。
要求 | loc() | 释义 | iloc() | 释义 |
---|---|---|---|---|
单列切片 | detail.loc(:, ‘id’) | 提取id列的数据 | detail.iloc(:, 6) | 提取第6列的数据 |
多列切片 | detail.loc(:, [‘id1’, ‘id2’]) | 提取id1列和id2的数据 | detail.iloc(:, [1, 6]) | 提取第1~6列的数据 |
花式切片 | detail.loc(6, [‘id1’, ‘id2’]) | 提取第6行 id1列和id2的数据 | detail.iloc(6, [2,4]) | 提取行位置为6,列位置为2和4的数据 |
detail.loc(2:6, [‘id1’, ‘id2’]) | 提取第2~6行 id1列和id2的数据 | detail.iloc(2:6, [2,4]) | 提取行位置为2~6,列位置为2和4的数据 | |
条件切片 | detail.loc(detail[‘id1’]==‘123’, [‘id1’, ‘id2’]) | 提取id1为123的id1、id2数据 | detail.iloc(detail[‘id1’==‘123’, [1,5]]) | 提取id1为123的第1、5列数据 |
以上detail都是作者所设置的DataFrame数据,类似于test的意思。
缺失值处理:
寻找:info()或isnull()
info()函数直接可以看到哪一列有多少缺失值,但并不能看到缺失值的具体位置。
isnull()函数把原数据转换成一个只有True和False的数据表,True代表不缺失,False代表此处缺失值,可以比较直观地看到整个数据表中缺失值的位置。运用isnull().sum()函数,就能得到类似于info()函数得到的统计表,但更加简单明了。
丢弃:dropna()
填充:fillna()或interpolate()
fillna({‘需要处理的列’:‘赋的新值’})
还有一种新办法,运用loc()函数,即loc[detail[‘修改的列’].isnull(), ‘赋的新值’]
链接: 缺失值处理.他这个讲的比较详细,我就直接贴链接了。
重复值处理:
寻找:duplicated()函数,效果类似于上述info()函数。
处理重复行:当两行数据完全重复时,使用drop_duplicates()函数,无需设置任何参数,即可删除后面重复的行,即若第6行与第8行重复,运行drop_duplicates()函数,第8行就会被删掉。
处理重复值:默认保留第一个重复值所在的行,删除其他重复值所在的行。可以利用drop_duplicates()函数的参数keep来自定义删除重复值时保留哪个重复值所在的行。
例如:将参数keep设置为’first’,表示保留第一个重复值所在的行,如果要保留最后一个重复值所在的行,则将参数keep设置为’last’。还可以将参数keep设置为False,表示把重复值一个不留地全部删除。
数值型特征的描述性统计主要包括了计算数值型数据的完整情况、最小值、均值、中位数、最大值等。
函数名称 | 说明 | 函数名称 | 说明 |
---|---|---|---|
np.min | 最小值 | np.max | 最大值 |
np.mean | 均值 | np.ptp | 极差 |
np.median | 中位数 | np.std | 标准差 |
np.var | 方差 | np.cov | 协方差 |