pandas处理各类表格数据
经常遇到Python读取excel和csv还有其他各种文件的内容。json还有web端的读取还是比较简单,但是excel和csv的读写是很麻烦。这里记录了
pandas库提供的方法来实现文本内容和DataFrame的转化。
一、读取文本格式数据
首先来看一下针对不同格式的文件的读取函数:

总结一下常见参数:(例子见下面代码)
| 参数 | 作用 |
|---|---|
| sep | 指定分隔符,可以是正则表达式 |
| header | 设置为None时处理没有header的文件 |
| names | 指定列 |
| index_col | 将列做成索引,可传入列表,可体现层次 |
| skiprows | 跳过注释行 |
| na_values | 接收表示缺失值的列表或字典 |
import pandas as pd
import numpy as np
import sys
import pymysql
df = pd.read_csv('ex1.csv')
print(df)
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
df = pd.read_table('ex1.csv',sep=',') #可以使用read_table,但必须指定分隔符
# sep还可以是正则表达式
print(df)
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
df = pd.read_csv('ex2.csv',header = None)#不是每一个csv都有header
print(df)
0 1 2 3 4
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
df = pd.read_csv('ex2.csv',names=['a','b','c','d','names'])#指定名字
print(df)
a b c d names
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
names=['a','b','c','d','names']
df = pd.read_csv('ex2.csv',names=names,index_col='names') #将names做成索引
print(df)
#names对应三个,abcd分别有对应的
a b c d
names
hello 1 2 3 4
world 5 6 7 8
foo 9 10 11 12
df = pd.read_csv('csv_mindex.csv')
print('原始样子:','\n',df)
df = pd.read_csv('csv_mindex.csv',index_col=['keys','key2'])
#层次化索引.
#请注意keys和key2的顺序
print(df)
原始样子:
keys key2 value1 value2
0 one a 1 2
1 one b 3 4
2 two a 9 10
3 two c 13 14
value1 value2
keys key2
one a 1 2
b 3 4
two a 9 10
c 13 14
df = pd.read_csv('ex4.csv')
print('原始样子:','\n',df)
#跳过文件的第几行
print()
df = pd.read_csv('ex4.csv',skiprows=[0,2])
print(df)
原始样子:
# hey!
a b c d message
# just wanted to make things more difficult NaN NaN NaN NaN
1 2 NaN 4 hello
a b c d message
0 1 2 NaN 4 hello
pd.isnull(df)# 处理缺失值
df = pd.read_csv('ex4.csv',skiprows=[0,2],na_values=['hello'])# 接收一组用于表示缺失值的字符串
print(df)
print(pd.isnull(df))
a b c d message
0 1 2 NaN 4 NaN
a b c d message
0 False False True False True
sentinels = {'message':['foo','NA'],'d':['a','NaN']}# 用一个字典为各列指定不同的NA标记值
df = pd.read_csv('ex4.csv',skiprows=[0,2],na_values=sentinels)
print(df)
a b c d message
0 1 2 NaN 4 hello
这里,给出了更详细的参数情况:


二、逐块读取文本文件
这里还是参数的调整问题。由于参数过少,这里不做统一整理。
# nrows参数指定只读取定行。算上第一行哦
pd.read_csv('ex1.csv',nrows=4)
.dataframe thead tr:only-child th {
text-align: right;
}
.dataframe thead th {
text-align: left;
}
.dataframe tbody tr th {
vertical-align: top;
}
| a | b | c | d | message | |
|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | hello |
| 1 | 5 | 6 | 7 | 8 | world |
| 2 | 9 | 10 | 11 | 12 | foo |
# chunksize 指定分块读取
chunks = pd.read_csv('ex1.csv',chunksize=2)
print(chunks)
<pandas.io.parsers.TextFileReader object at 0x0000007D7E4A39B0>
for chunk in chunks:
print(chunk)
print('='*10,)
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
==========
a b c d message
2 9 10 11 12 foo
==========
三、将数据写出到文本格式
data = pd.read_csv('ex1.csv',nrows=3)
data.to_csv('ex1_1.csv') #to_csv写入
data.to_csv('ex1_2.csv',sep='|')# 别的分隔符
data.to_csv('ex1_1.csv',na_rep='NULL')# 缺失值会被替换为na_rep
data.to_csv(sys.stdout,index=False,header=False)
# 行、列标签被禁止
# 输出到控制台
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
data.to_csv(sys.stdout,index=False,columns=['a','b'])
a,b
1,2
5,6
9,10
data.to_csv(sys.stdout)
,a,b,c,d,message
0,1,2,3,4,hello
1,5,6,7,8,world
2,9,10,11,12,foo
四、DataFrame和数据库
# 可以将json格式的数据传给DataFreame
# 也可以数据将数据库的rows传给DataFrame
conn = pymysql.Connect(host='172.31.238.166',port=3306,user='luowang',passwd='root',\
charset='UTF8',db='dyx')
cursor=conn.cursor()
sql='select * from access_log';
cursor.execute(sql)
rows= cursor.fetchall()
print(cursor.description)
(('aid', 3, None, 16, 16, 0, False), ('site_id', 3, None, 16, 16, 0, False), ('count', 3, None, 32, 32, 0, False))
# cursor.description第一个保存了列的信息
# pd.DataFrame(rows,columns=[i[0] for i in cursor.description])
pd.DataFrame(list(rows),columns=[i[0] for i in cursor.description]) #rows必须是list类型
.dataframe thead tr:only-child th {
text-align: right;
}
.dataframe thead th {
text-align: left;
}
.dataframe tbody tr th {
vertical-align: top;
}
| aid | site_id | count | |
|---|---|---|---|
| 0 | 1 | 1 | 45 |
| 1 | 2 | 3 | 100 |
| 2 | 3 | 1 | 230 |
| 3 | 4 | 2 | 10 |
| 4 | 5 | 5 | 205 |
| 5 | 6 | 4 | 13 |
| 6 | 7 | 3 | 220 |
| 7 | 8 | 5 | 545 |
| 8 | 9 | 3 | 201 |
| 9 | 10 | 10 | 10 |
| 10 | 11 | 11 | 11 |
欢迎进一步交流本博文相关内容:
博客园地址 : http://www.cnblogs.com/AsuraDong/
CSDN地址 : http://blog.csdn.net/asuradong
也可以致信进行交流 : xiaochiyijiu@163.com
欢迎关注个人微博:http://weibo.com/AsuraDong
欢迎转载 , 但请指明出处 : )
pandas处理各类表格数据的更多相关文章
- 使用pandas中的raad_html函数爬取TOP500超级计算机表格数据并保存到csv文件和mysql数据库中
参考链接:https://www.makcyun.top/web_scraping_withpython2.html #!/usr/bin/env python # -*- coding: utf-8 ...
- 利用 pandas库读取excel表格数据
利用 pandas库读取excel表格数据 初入IT行业,愿与大家一起学习,共同进步,有问题请指出!! 还在为数据读取而头疼呢,请看下方简洁介绍: 数据来源为国家统计局网站下载: 具体方法 代码: i ...
- Python使用Tabula提取PDF表格数据
今天遇到一个批量读取pdf文件中表格数据的需求,样式大体是以下这样: python读取PDF无非就是三种方式(我所了解的),pdfminer.pdf2htmlEX 和 Tabula.综合考虑后,选择了 ...
- pandas读取各类sql数据源
大数据分析中,我们经常需要使用pandas工具读取各类数据源并将结果保存到数据库中. 本文总结了一些读取和写入常用数据库数据的一些方法,包括mysql,oracle,impala等. 其中读取数据库数 ...
- 另类爬虫:从PDF文件中爬取表格数据
简介 本文将展示一个稍微不一样点的爬虫. 以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...
- @1-5使用pandas保存豆瓣短评数据
使用pandas保存豆瓣短评数据 Python爬虫(入门+进阶) DC学院 本节课程的内容是介绍open函数和pandas两种保存已爬取的数据的方法,并通过实际例子使用pandas保存数据. ...
- 利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)
在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 1.层次化索引 层次化索引(hierarchical indexing)是panda ...
- 利用pandas读取Excel表格,用matplotlib.pyplot绘制直方图、折线图、饼图
利用pandas读取Excel表格,用matplotlib.pyplot绘制直方图.折线图.饼图 数据: 折线图代码: import pandas as pdimport matplotlib. ...
- 实操 | 内存占用减少高达90%,还不用升级硬件?没错,这篇文章教你妙用Pandas轻松处理大规模数据
注:Pandas(Python Data Analysis Library) 是基于 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.此外,Pandas 纳入了大量库和一些标准的数据模型 ...
随机推荐
- 【POJ 2983】 Is the information reliable?
[题目链接] 点击打开链接 [算法] 差分约束系统,SPFA判负环 [代码] #include <algorithm> #include <bitset> #include & ...
- RDA 工模
1.工模GUI如下图: 注意两个API接口,_APP_Update_Layer()/UpdateNodeFunctionContent() 这两个接口一个是刷新ListView,另一个刷新ListVi ...
- win7 32位解决matlab out of memory问题
由于最近在做DL,matlab load数据时由于内存只有2G,会出现out of memory的情况,网上百度了下都是在xp下打开3GB来解决该问题,但是由于win7没有boot.ini无法在win ...
- Objective-C 对象的类型与动态结合
创建: 2018/01/21 更新: 2018/01/22 标题前增加 [Objective-C] 完成: 2018/01/24 更新: 2018/01/24 加红加粗属性方法的声明 [不直接获取内部 ...
- bzoj 1753: [Usaco2005 qua]Who's in the Middle【排序】
--这可能是早年Pascal盛行的时候考排序的吧居然还是Glod-- #include<iostream> #include<cstdio> #include<algor ...
- 1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)
1642: [Usaco2007 Nov]Milking Time 挤奶时间 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 935 Solved: 55 ...
- 商品期货高频交易策略Tick框架
原帖地址:https://www.fmz.com/bbs-topic/1184在商品期货高频交易策略中, Tick行情的接收速度对策略的盈利结果有着决定性的影响,但市面上大多数交易框架,都是采用回调模 ...
- win10家庭版添加本地账户方法
1.正常情况下,windows的使用者都习惯于用本地用户及用户组工具来创建新用户,如下图所示,在win10的开始窗口右侧的空白处,输入lusrmgr.msc 打开本地用户管理控制台. 2.在win10 ...
- python 中 str与bytes的转换
# bytes转字符串方式一 b=b'\xe9\x80\x86\xe7\x81\xab' string=str(b,'utf-8') print(string) # bytes转字符串方式二 b=b' ...
- 二分搜索 POJ 3273 Monthly Expense
题目传送门 /* 题意:分成m个集合,使最大的集合值(求和)最小 二分搜索:二分集合大小,判断能否有m个集合. */ #include <cstdio> #include <algo ...