使用pandas读取文件的实现
作者:修炼之路 发布时间:2022-10-20 14:00:42
pandas可以将读取到的表格型数据(文件不一定要是表格)转成DataFrame类型的数据结构,然后我们可以通过操作DataFrame进行数据分析,数据预处理以及行和列的操作等。下面介绍一些常用读取文件的方法
1、read_csv函数
功能:从文件、URL、文件新对象中加载带有分隔符的数据,默认分隔符是逗号。
data.txt
a,b,c,d,name
1,2,3,4,python
5,6,7,8,java
9,10,11,12,c++
data = pd.read_csv("data.txt")
print(data)
'''
a b c d name
0 1 2 3 4 python
1 5 6 7 8 java
2 9 10 11 12 c++
'''
2、read_table函数
功能:从文件、URL、文件型对象中加载带分隔符的数据,默认分隔符为制表符("\t")。
data.txt的内容还是不变,我们可以通过指定read_table的sep参数来修改默认的分隔符。
data = pd.read_table("data.txt",sep=",")
print(data)
'''
a b c d name
0 1 2 3 4 python
1 5 6 7 8 java
2 9 10 11 12 c++
'''
3、读取没有标题的文件
data.txt
1,2,3,4,python
5,6,7,8,java
9,10,11,12,c++
data = pd.read_csv("data.txt")
#默认将第一行作为标题
print(data)
'''
1 2 3 4 python
0 5 6 7 8 java
1 9 10 11 12 c++
'''
#设置header参数,读取文件的时候没有标题
data1 = pd.read_csv("data.txt",header=None)
print(data1)
'''
0 1 2 3 4
0 1 2 3 4 python
1 5 6 7 8 java
2 9 10 11 12 c++
'''
#设置names参数,来设置文件的标题
data2 = pd.read_csv("data.txt",names=["a","b","c","d","name"])
print(data2)
'''
a b c d name
0 1 2 3 4 python
1 5 6 7 8 java
2 9 10 11 12 c++
'''
4、读取文件设置列索引
#设置names参数,来设置文件的标题,设置index_col参数来设置列索引
data2 = pd.read_csv("data.txt",names=["a","b","c","d","name"],index_col="name")
print(data2)
'''
a b c d
name
python 1 2 3 4
java 5 6 7 8
c++ 9 10 11 12
'''
如果不设置列索引,默认会使用从0开始的整数索引。当对表格的某一行或列进行操作之后,在保存成文件的时候你会发现总是会多一列从0开始的列,如果设置index_col参数来设置列索引,就不会出现这种问题了。
a、指定多个列为列索引产生一个层次化索引
一个值由两个列索引(key1和kye2)和一个行索引(value1或value2)来决定,可以将其理解为一个三维数据,三个点来构成一个坐标位置。
data.txt
key1,key2,value1,value2
a,a,1,2
a,b,3,4
b,c,5,6
b,d,7,8
c,e,9,10
c,f,11,12
data = pd.read_csv("data.txt",index_col=["key1","key2"])
print(data)
'''
value1 value2
key1 key2
a a 1 2
b 3 4
b c 5 6
d 7 8
c e 9 10
f 11 12
'''
5、对于不规则分隔符,使用正则表达式读取文件
文件中的分隔符采用的是空格,那么我们只需要设置sep=" "来读取文件就可以了。当分隔符并不是单个的空格,也许有的是一个空格有的是多个空格时,如果这个时候还是采用sep=" "来读取文件,也许你就会得到一个很奇怪的数据,因为它会将空格也做为数据。
data.txt
name a b c d
python 1 2 3 4
java 5 6 7 8
c++ 9 10 11 12
data = pd.read_csv("data.txt",sep=" ")
print(data)
'''
name a Unnamed: 2 Unnamed: 3 b Unnamed: 5 c Unnamed: 7 \
python NaN NaN 1.0 NaN 2 3.0 NaN NaN
java 5.0 6.0 NaN 7.0 8 NaN NaN NaN
c++ NaN 9.0 NaN NaN 10 NaN NaN 11.0
Unnamed: 8 Unnamed: 9 d
python NaN NaN 4.0
java NaN NaN NaN
c++ NaN 12.0 NaN
'''
使用正则表达式进行分割就可以避免上面问题的发生
data = pd.read_csv("data.txt",sep="\s+")
print(data)
'''
name a b c d
0 python 1 2 3 4
1 java 5 6 7 8
2 c++ 9 10 11 12
'''
6、跳行读取文件
有的时候,你会遇到表格中的某些行数据你并不需要。可以通过skiprows参数来跳过这些行。
data.txt
#data.txt
name,a,b,c,d
python,1,2,3,4
#hello
java,5,6,7,8
#word
c++,9,10,11,12
#通过skiprows参数来设置跳过行,从0开始
data = pd.read_csv("data.txt",skiprows=[0,3,5])
print(data)
'''
name a b c d
0 python 1 2 3 4
1 java 5 6 7 8
2 c++ 9 10 11 12
'''
7、读取含有缺失值的文件
使用pandas在读取文件的时候,pandas会默认将NA、-1.#IND、NULL等当作是缺失值,pandas默认使用NaN进行代替。
data.txt
name,a,b,c,d
python,1,NA,3,4
java,5,6,7,NULL
c++,-1.#IND,10,,12
data = pd.read_csv("data.txt")
print(data)
'''
name a b c d
0 python 1.0 NaN 3.0 4.0
1 java 5.0 6.0 7.0 NaN
2 c++ NaN 10.0 NaN 12.0
'''
也许有的时候也许pandas默认被当作的缺失值还不能满足你的要求,我们可以通过设置na_values,将指定的值替换成为NaN值
data1 = pd.read_csv("data.txt",na_values=["java","c++"])
print(data1)
'''
name a b c d
0 python 1.0 NaN 3.0 4.0
1 NaN 5.0 6.0 7.0 NaN
2 NaN NaN 10.0 NaN 12.0
'''
也许有时候你还会遇到,你想将某个值替换成为NaN,但是可能有多个列都包含了这个值,而我们却不想替换所有的列,我们可以通过一个字典的形式来设置na_values参数,字典的键就是列索引,值就是你要替换的值。
data.txt
name,a,b,c,d
python,1,NA,3,4
java,5,6,python,NULL
c++,-1.#IND,10,,c++
#将python和c++都用NaN进行替代,将所有的python和c++都替换成了NaN
data1 = pd.read_csv("data.txt",na_values=["python","c++"])
print(data1)
'''
name a b c d
0 NaN 1.0 NaN 3.0 4.0
1 java 5.0 6.0 NaN NaN
2 NaN NaN 10.0 NaN NaN
'''
只将第一列的python和c++替换为NaN
#将python和c++都用NaN进行替代
dic = {"name":["python","c++"]}
data1 = pd.read_csv("data.txt",na_values=dic)
print(data1)
'''
name a b c d
0 NaN 1.0 NaN 3 4
1 java 5.0 6.0 python NaN
2 NaN NaN 10.0 NaN c++
'''
8、read_csv和read_tabel的参数介绍
read_csv和read_table函数有很多的参数,下面对一些重点参数进行介绍。
参数:
path:表示文件系统位置、URL、文件型对象的字符串。
sep或delimiter:用于对行中各字段进行拆分的字符序列或正则表达式。
header:用作列名的行号。默认为0(第一行),如果文件没有标题行就将header参数设置为None。
index_col:用作行索引的列编号或列名。可以是单个名称/数字或有多个名称/数字组成的列表(层次化索引)。
names:用于结果的列名列表,结合header=None,可以通过names来设置标题行。
skiprows:需要忽略的行数(从0开始),设置的行数将不会进行读取。
na_values:设置需要将值替换成NA的值。
comment:用于注释信息从行尾拆分出去的字符(一个或多个)。
parse_dates:尝试将数据解析为日期,默认为False。如果为True,则尝试解析所有列。除此之外,参数可以指定需要解析的一组列号或列名。如果列表的元素为列表或元组,就会将多个列组合到一起再进行日期解析工作。
keep_date_col:如果连接多列解析日期,则保持参与连接的列。默认为False。
converters:由列号/列名跟函数之间的映射关系组成的字典。如,{"age:",f}会对列索引为age列的所有值应用函数f。
dayfirst:当解析有歧义的日期时,将其看做国际格式(例如,7/6/2012 ---> June 7 , 2012)。默认为False。
date_parser:用于解析日期的函数。
nrows:需要读取的行数。
iterator:返回一个TextParser以便逐块读取文件。
chunksize:文件块的大小(用于迭代)。
skip_footer:需要忽略的行数(从文件末尾开始计算)。
verbose:打印各种解析器输出信息,如“非数值列中的缺失值的数量”等。
encoding:用于unicode的文本编码格式。例如,"utf-8"或"gbk"等文本的编码格式。
squeeze:如果数据经过解析之后只有一列的时候,返回Series。
thousands:千分位分隔符,如","或"."。
来源:https://blog.csdn.net/sinat_29957455/article/details/79054126


猜你喜欢
- 前言文件和目录操作是很常见的功能,这里做个简单的总结,包括注意事项和实际的实现代码,基本日常开发都够用了目录操作判断目录或是文件是否存在os
- 为了优化OceanBase的query timeout设置方式,特调研MySQL关于timeout的处理,记录如下。 mysql> s
- 1.安装vue-cli 3.0npm install -g @vue/cli# oryarn global add @vue/cli安装成功
- 一、merge函数用途pandas中的merge()函数类似于SQL中join的用法,可以将不同数据集依照某些字段(属性)进行合并操作,得到
- 在我们的网站建设中,为网站打造一个契合网站主题的个性化标志则是必需的,这直接关系到能否成功地塑造网站的品牌。这从某些角度看仍在网站推广的范畴
- 一.概念简介 脚本:script是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。 二.背景 近来在Wind
- 前言mysql模块(项目地址为https://github.com/mysqljs/mysql)是一个开源的、JavaScript编写的My
- 在使用Sublime Text3 的时候导numpy的包发现报错,找不到这个包,这是因为要配置pip源才能正常导包,进行from numpy
- 想必很多初次接触python都会见到这样一个语句,if __name__ == "__main__":那么这个语句到底是
- 导语在工作场景遇到了这么一个场景,就是需要定期去执行一个缓存接口,用于同步设备配置。首先想到的就是Linux上的crontab,可以定期,或
- 实现效果将位于/img目录下的1000张.png图片,转换成.webp格式,并存放于img_webp文件夹内。源图片目录目标图片目录关于批量
- 表的创建CREATE TABLE `lee` (`id` int(10) NOT NULL AUTO_INCREMENT, `name` c
- 一、比较运算符和比较方法比较运算符用于判断是否相等和比较大小,Python中的比较运算符有==、!=、<、>、<=、>
- 一、浪漫玫瑰花实现代码:from turtle import *import timesetup(1000,800,0,0)speed(0)
- 本文实例讲述了python实现通过pil模块对图片格式进行转换的方法。分享给大家供大家参考。具体分析如下:python的pil模块相当的智能
- ipad的goodreader对JS文件支持不太好,虽然可以读取它但总是无法退出,回不了goodreader的主界面,因此我需要把js文件批
- 实现逻辑1、Golang 版本 1.32、实现原理:1、主进程建立TCP监听服务,并且初始化一个变量 talkChan := m
- 在工作中,有时会遇见需要将数字转换为条码的问题,每次都需要打开条码转换的网站,一次次的转换后截图,一两个还行,但是当需要转换的数量较多时,就
- 尽管 xml.etree.ElementTree 库通常用来做解析工作,其实它也可以创建XML文档。 例如,考虑如下这个函数:from xm
- 先问一个问题, 在firefox 2里,正则表达式字符"\d"全等于"[0-9]"吗?有可能你会答&