查看原文
其他

如何使用Pandas读取txt文件?

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:寇晓璇,中南财经政法大学统计与数学学院

本文编辑:尚晨曦

技术总编:陈   鼎

Stata&Python云端课程来啦!

      寒雪梅中尽,春风柳上归。为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》;原价600元的正则表达式课程,现在仅需49.9元,详情请查看推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》;原价600元的基本字符串函数课程,现在仅需49.9元,更多信息请查看推文《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程;原价600元的网络爬虫课程,现在仅需49.9元,更多信息请查看推文《与春天有个约会,爬虫俱乐部重磅推出网络爬虫专题课程》原价600元的文本分析课程,现在仅需49.9元,更多信息请查看推文与春天有个约会,爬虫俱乐部重磅推出文本分析网络课程。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦!


导读

一般情况下,各种数据都是保存在磁盘中的,想要对它们进行数据分析时,就需要利用Python将它们读取至内存里,此时Pandas便派上用场了。Pandas模块能够读写很多格式的数据,如csv、txt、excel、sql、json、html等。在Pandas中,文件通常使用类似pandas.read_xxx()形式的函数进行读取,并使用to_xxx()形式的方法进行写入。在本文中,笔者主要讲述一下如何使用Pandas读取txt格式的文件。
准备txt文件

在学习读取txt文件之前,我们首先预习一下如何建立一个txt文件。在这里,我们考虑这样一个DataFrame数据:
1#引入numpy库、pandas库
2import numpy as np     
3import pandas as pd     
4#随机生成维度4*5的一组样本,服从标准正态分布
5df=pd.DataFrame(np.random.randn(4,5),index=list("1234"),columns=list("ABCDE"))
6df

可以使用DataFrame中的to_csv()方法将上述表格保存为txt文件:

1#将df保存为txt文件,指定它的分隔符是"\t"
2df.to_csv("C:/Users/Coco/Desktop/Python/df1.txt",sep='\t')
通过上述命令,一个txt文件就建立好了,下一步我们学习如何去读取该文件。
读取txt文件
读取txt文件前需要确定txt文件是否符合基本格式,也就是是否存在“\t”等特殊的分隔符,如果存在这样的分隔符,便可对其进行读取。在读取txt文件时,一般使用Pandas中的read_table函数和read_csv函数。
01read_table函数

使用read_table函数读取txt文件的命令如下:

1#读入df1.txt文件,指定它的分隔符是"\t"
2pd.read_table("C:/Users/Coco/Desktop/Python/df1.txt",sep='\t')

我们可以观察到,该表格与之前的DataFrame对象相比,我们读取到的对象多了Unnamed:0列,它是原来DataFrame对象的行标记。因为在保存文件的时候,Pandas默认会保存行标记和列标记的值,但在读取文件时,Pandas并不知道该列是行标记。

在读取文件的时候,如果不设置index_col列索引,默认会使用从0开始的整数索引。当对表格的某一行或列进行操作之后,在保存成文件的时候你会发现总是会多一列从0开始的列,如果设置index_col参数来设置列索引,就不会出现这种问题了。因此,我们在读取时,可以使用参数index_col指定行标记所在的列。

1#读入df1.txt文件,指定它的分隔符是\t,设置第1列数据作为index
2pd.read_table("C:/Users/Coco/Desktop/Python/df1.txt",sep='\t',index_col=0)

另一种方法,可以在保存的时候,输入index=False忽略行标记,也可以得到与上述命令相同的结果。

1#将df保存为txt文件时忽略行标记
2df.to_csv("C:/Users/Coco/Desktop/Python/df1.txt",sep='\t',index=False)
3#读取df1.txt文件 
4pd.read_table("C:/Users/Coco/Desktop/Python/df1.txt",sep='\t'
02read_csv函数

在Pandas中使用read_csv函数读取txt文件与使用read_table函数十分类似。

1#df的写入、读取
2df.to_csv("C:/Users/Coco/Desktop/Python/df1.txt",sep='\t')
3pd.read_csv("C:/Users/Coco/Desktop/Python/df1.txt",sep='\t',index_col=0)

那么read_table函数和read_csv函数在读取txt文件时有什么区别呢?它们的区别在于默认separator分隔符有所不同。read_table函数默认是以" \t "切割数据集的,而read_csv函数默认是以" , "来切割数据集。

函数说明
read_table从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(”\t”)。
read_csv从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号。
1df.to_csv("C:/Users/Coco/Desktop/Python/df2.txt")   #df的写入,分隔符为“,”
2pd.read_csv("C:/Users/Coco/Desktop/Python/df2.txt",index_col=0)
此时,使用read_csv函数去读取txt文件时,便可以省略默认分隔符sep=“,”
准备txt文件读取的其他操作

首先,准备如下ex1.txt文件(后台回复“ex1”即可获得)。

01txt文件指定读取
1# 文件ex1.txt的读入,分隔符为‘\t’
2ex1 = pd.read_csv("C:/Users/Coco/Desktop/Python/ex1.txt",sep="\t")
3ex1
4# pd.read_csv将第一行默认为标题行即列名,行索引0,1,2,3为自动添加
5# 文件第一行不作为标题行,自动添加列索引 0,1,2,3,4,5
6ex2=pd.read_csv("C:/Users/Coco/Desktop/Python/ex1.txt",sep="\t",header=None)
7ex2
8#自定义列名
9ex3=pd.read_csv("C:/Users/Coco/Desktop/Python/ex1.txt",sep="\t",header=None,names=['something','a','b','c','d','e'])
10ex3
11#建立索引:something
12ex4=pd.read_csv("C:/Users/Coco/Desktop/Python/ex1.txt",sep="\t",header=None,names=['something','a','b','c','d','e'],index_col='something')
13ex4
14#层次化索引:指定多个列作为行索引即可
15ex5=pd.read_csv("C:/Users/Coco/Desktop/Python/ex1.txt",sep="\t",header=None,names=['something','a','b','c','d','e'],index_col=['something','a'])
16ex5
17#只读入前面3行
18ex6=pd.read_csv("C:/Users/Coco/Desktop/Python/ex1.txt",sep="\t",header=None,names=['something','a','b','c','d','e'],nrows=3)
19ex6
20#跳过指定行
21ex7=pd.read_csv("C:/Users/Coco/Desktop/Python/ex1.txt",sep="\t",header=None,names=['something','a','b','c','d','e'],skiprows=[0,2])
22ex7
23#计算表格行数,不包括表头
24rownum = ex3.shape[0]    
25#计算表格列数,并输出行数、列数
26colnum = ex3.columns.size
27print("行数:",rownum)
28print("列数:",colnum)
02对列、行进行操作
1#提取指定的列
2print(ex3['b'])   #方式一
3print(ex3.b.values)   #方式二
4#根据something列对数据去重
5rex3 = ex3.drop_duplicates(['something'])
6rex3
7#获取something列去重后的值
8rsomething = ex3['something'].unique()  
9print('rsomething:',rsomething)
10#something列去重后有多少值
11totalrsomethingnum = rsomething.size   
12print('num:',totalrsomethingnum)
13#计算a列所有值之和
14ex3['a'].sum()     
15#过滤含特定值的行,挑选出a列取值为1或9的行
16ex3[(ex3['a']==1)|(ex3['a']==9)]    
17#计算a列各个取值的个数
18aex3 = ex3.groupby('a').size()    #方式一
19aex3
20bex3 = ex3['a'].value_counts()   #方式二
21bex3
22#计算a列取值为1和取值为5的个数
23v=aex3[1]+aex3[5]     
24print("两个的和:",v)     
25print("总和:",aex3.sum())
03用图形表示各个取值
1import matplotlib.pyplot as plt
2fig=plt.figure()
3ex3.plot(kind='bar',grid=True)   #bar和barh能切换x轴,y轴
4plt.show()        #在需要显示的时候调用,会一次把所有的图都画出

04缺失值的显示:参数 na_values
1#将ex4保存为txt文件,指定它的分隔符是\t
2ex4.to_csv("C:/Users/Coco/Desktop/Python/ex4.txt",sep='\t'
3#缺失值的显示,默认将缺失值标记为 NaN
4result1 = pd.read_table('C:/Users/Coco/Desktop/Python/ex4.txt')
5result1
6#参数 na_values设置显示为 NaN的字符串,可以是单个字符串也可是列表
7result2 = pd.read_table('C:/Users/Coco/Desktop/Python/ex4.txt',na_values=['world'])
8result2
9#也可以通过字典的形式给出需要标记为NaN的值,'message'列被记为NaN的值有'foo'和 'NA',‘somthing’列的有‘two’
10result3 = pd.read_table('C:/Users/Coco/Desktop/Python/ex4.txt',na_values={'message': ['foo''NA'], 'something': ['two']})
11result3

以上就是今天的全部内容了,可以自己尝试建立一个txt文件,利用上述提到的方法读取一下,快去着手试试吧!

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。

欢迎大家点赞、评论、转发呦~


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!

往期推文推荐

基于MySQL数据库实现增量式爬取

寻找春日气息|本月最受欢迎的景点都在这里!

问世间情为何物,大数据也想参悟——后考研时代,何以解忧?唯有数据!

Python与数据库交互—浅述pymysql

偷懒小妙招|selenium之玩转鼠标键盘操作--鼠标篇

大家用Stata来“找茬”

雪球网关注度监测:关注人数Top10的证券原来是这些!你持有的股票上榜了吗?

Python与百度地图合璧,绘制棒呆的热力地图

【数据可视化】统计图绘制神器:Seaborn

检索Stata推文的“任意门”学会了这些,分分钟提升你的毕业体验

【爬虫实战】双一流大学的月关注度

【爬虫实战】“中国人不吃这一套”——人民日报微博评论分析

进化的标签管理助手——elabel命令

“学术明星”——双重差分法(DID)的Stata操作

偷懒小妙招| selenium之玩转鼠标键盘操作(上)

【爬虫实战】南京地铁又上热榜——客流量分析

renfiles:批量重命名文件的利器

Stata中字符串的处理

物以类聚——浅述k-means聚类算法

我在哪里?调用高德API获取地址经纬度信息

超级简单的条件函数,轻松生成虚拟变量

Python云端课程福利大放送!0基础也能学~

【爬虫实战】“我们,继续新故事”——爬取LOL英雄皮肤

“人像动漫化”—Python实现抖音特效

跨框架合并数据|frlink的用法,你get到了吗

关于我们 


微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存