本文目录一览:
- 1、python提取excel表中的数据两列
- 2、Python如何显示年龄在30-50之间的数据用什么语句?
- 3、Python和MATLAB读取excel指定行列数据的方法
- 4、python读取数据库怎么把列名显示出来
- 5、怎样用python,读取excel中的一列数据
- 6、python数据分析-科学计数法
python提取excel表中的数据两列
1、首先打开excel表格,在单元格中输入两列数据,需要将这两列数据进行比对相同数据。
2、然后在C1单元格中输入公式:=VLOOKUP(B1,A:A,1,0),意思是比对B1单元格中A列中是否有相同数据。
3、点击回车,即可将公式的计算结果显示出来,可以看到C1中显示的是B1在A列中找到的相同数据。
4、将公式向下填充,即可发现C列中显示出的数字即为有相同数据的,显示“#N/A”的为没有找到匹配数据的。
5、将C1-C4中的数据进行复制并粘贴成数值,即可完成相同数据的提取操作。
在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报、发行上市公告等。面对如此多的数据表格,采用手工复制黏贴的方式显然并不可取。那么如何才能高效提取出pdf文件中的表格数据呢?
Python提供了许多可用于pdf表格识别的库,如camelot、tabula、pdfplumber等。综合来看,pdfplumber库的性能较佳,能提取出完整、且相对规范的表格。因此,本推文也主要介绍pdfplumber库在pdf表格提取中的作用。
作为一个强大的pdf文件解析工具,pdfplumber库可迅速将pdf文档转换为易于处理的txt文档,并输出pdf文档的字符、页面、页码等信息,还可进行页面可视化操作。使用pdfplumber库前需先安装,即在cmd命令行中输入:
pip install pdfplumber
pdfplumber库提供了两种pdf表格提取函数,分别为.extract_tables( )及.extract_table( ),两种函数提取结果存在差异。为进行演示,我们网站上下载了一份短期融资券主体信用评级报告,为pdf格式。任意选取某一表格,其界面如下:
接下来,我们简要分析两种提取模式下的结果差异。
(1).extract_tables( )
可输出页面中所有表格,并返回一个嵌套列表,其结构层次为table→row→cell。此时,页面上的整个表格被放入一个大列表中,原表格中的各行组成该大列表中的各个子列表。若需输出单个外层列表元素,得到的便是由原表格同一行元素构成的列表。例如,我们执行如下程序:
输出结果:
(2).extract_table( )
返回多个独立列表,其结构层次为row→cell。若页面中存在多个行数相同的表格,则默认输出顶部表格;否则,仅输出行数最多的一个表格。此时,表格的每一行都作为一个单独的列表,列表中每个元素即为原表格的各个单元格内容。若需输出某个元素,得到的便是具体的数值或字符串。如下:
输出结果:
在此基础上,我们详细介绍如何从pdf文件中提取表格数据。其中一种思路便是将提取出的列表视为一个字符串,结合Python的正则表达式re模块进行字符串处理后,将其保存为以标准英文逗号分隔、可被Excel识别的csv格式文件,即进行如下操作:
输出结果:
尽管能获得完整的表格数据,但这种方法相对不易理解,且在处理结构不规则的表格时容易出错。由于通过pdfplumber库提取出的表格数据为整齐的列表结构,且含有数字、字符串等数据类型。因此,我们可调用pandas库下的DataFrame( )函数,将列表转换为可直接输出至Excel的DataFrame数据结构。DataFrame的基本构造函数如下:
DataFrame([data,index, columns])
三个参数data、index和columns分别代表创建对象、行索引和列索引。DataFrame类型可由二维ndarray对象、列表、字典、元组等创建。本推文中的data即指整个pdf表格,提取程序如下:
其中,table[1:]表示选定整个表格进行DataFrame对象创建,columns=table[0]表示将表格第一行元素作为列变量名,且不创建行索引。输出Excel表格如下:
通过以上简单程序,我们便提取出了完整的pdf表格。但需注意的是,面对不规则的表格数据提取,创建DataFrame对象的方法依然可能出错,在实际操作中还需进行核对。
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
Python如何显示年龄在30-50之间的数据用什么语句?
本回答如下:
1. 数据筛选
a b c
0 0 2 4
1 6 8 10
2 12 14 16
3 18 20 22
4 24 26 28
5 30 32 34
6 36 38 40
7 42 44 46
8 48 50 52
9 54 56 58
可以使用 (并)与 | (或)操作符或者特定的函数实现多条件筛选
使用 筛选 a 列的取值大于 30,b 列的取值小于 50的记录
df[(df[‘a’] 30) (df[‘b’] 40)]
Python和MATLAB读取excel指定行列数据的方法
1、用xlrd读取
对应方法如下,需要先import xlrd和numpy,通过row_start和row_end控制行数,通过column_start和column_end控制列数
这里要注意python是0-based索引,excel看的时候是1-based的索引
2、用pandas下的read_excel函数
dframe = pd.read_excel(“file_name.xlsx”)
dframe = pd.read_excel(“file_name.xlsx”, sheetname=”Sheet_name”)
dframe = pd.read_excel(“file_name.xlsx”, sheetname=number)
读取表格的方式有两种:
1、xlsread
[~,MeaDef,~]=xlsread(xls_site,table_tag,'B12:AI12');
这里输出是一个对应数字,一个对应字符串,一个是用元胞把所有数据放在一起
对应的xlswrite格式:
xlswrite(xls_site_output,train,1,['A',num2str(ix+1),':M',num2str(ix+1)])
2、read_table
python读取数据库怎么把列名显示出来
def query(self, sql):
connect = self.connect()
cur = connect.cursor()
cur.execute(sql)
index = cur.description
result = []
for res in cur.fetchall():
row = {}
for i in range(len(index)-1):
row[index[i][0]] = res[i]
result.append(row)
connect.close()
return result
这个方法返回查询结果就是带字段名的{‘字段名’:‘值’}
怎样用python,读取excel中的一列数据
感觉还是CSV格式的好处理一些,EXCEL的要装插件,以CSV为例,给一段代码
sqlserver char 对应c#
import linecache
o=open('d:\\test\\14.csv')#文件路径
o.seek(0)
r=o.readlines()
s1=str(input('输入要定位的信息:'))
a=0
count=0
for i in r: #按和值组合查找
if i.find(s1)=0:
print r[a-1]#显示上一行
print i#显示定位行
print r[a+1]#显示下一行
a+=1
print 'Total:%d'%count
例:
在以下数据中,查找含有T的行,并显示上一行(n行) or 下一行(n行) 。
1,2,3,4
W,R,GFR,T
12,,F,34,G
python数据分析-科学计数法
用python进行数据分析时,查看数据,经常发生数据被自动显示成科学记数法的模式,或者多行多列数据只显示前后几行几列,中间都是省略号的情形。
import numpy as npnp.set_printoptions(suppress=True, threshold=np.nan)
suppress=True 取消科学记数法
threshold=np.nan 完整输出(没有省略号)
display.[max_categories, max_columns, max_colwidth, max_info_columns, max_info_rows, max_rows, max_seq_items, memory_usage, multi_sparse, notebook_repr_html, pprint_nest_depth, precision, show_dimensions]
详细介绍文档: pd.set_option
可以在pd.set_option设置display.float_format参数来以政策小数显示,比如下面设置显示到小数点后3位
pd.set_option('display.float_format', lambda x: '%.3f' % x)
set_option中还有其它一些控制设置,包括默认显示列数,行数等等
pd.set_option('display.max_columns',5, 'display.max_rows', 100)
import pandas as pdpd.set_option('display.max_columns', 10000, 'display.max_rows', 10000)
display.max_columns 显示最大列数
display.max_rows 显示最大行数
1、pd.set_option(‘expand_frame_repr’, False)
True就是可以换行显示。设置成False的时候不允许换行
2、pd.set_option(‘display.max_rows’, 10)
pd.set_option(‘display.max_columns’, 10)
显示的最大行数和列数,如果超额就显示省略号,这个指的是多少个dataFrame的列。如果比较多又不允许换行,就会显得很乱。
3、pd.set_option(‘precision’, 5)
显示小数点后的位数
4、pd.set_option(‘large_repr’, A)
truncate表示截断,info表示查看信息,一般选truncate
5、pd.set_option(‘max_colwidth’, 5)
列长度
6、pd.set_option(‘chop_threshold’, 0.5)
绝对值小于0.5的显示0.0
7、pd.set_option(‘colheader_justify’, ‘left’)
显示居中还是左边,
8、pd.set_option(‘display.width’, 200)
横向最多显示多少个字符, 一般80不适合横向的屏幕,平时多用200.
np.set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None, formatter=None)
参数:
precision 设置浮点数的精度 (默认值:8)
threshold 设置显示的数目(超出部分省略号显示, np.nan是完全输出,默认值:1000)
edgeitems 设置显示前几个,后几个 (默认值:3)
suppress 设置是否科学记数法显示 (默认值:False)
示例如下:
import numpy as npnp.set_printoptions(precision=4, threshold=8, edgeitems=4, linewidth=75, suppress=True, nanstr='nan', infstr='inf')print("precision=4, 浮点数精确小数点后4位: ", np.array([1.23446789]))print("threshold=8, edgeitems=4, 显示8个,前4后4: ", np.arange(10))np.set_printoptions(formatter={'all': lambda x :'int:'+str(-x)})print("formatter, 格式化输出: ", np.arange(5))
输出如下:
[图片上传失败...(image-15f596-1587702700460)]
注意:precision自动四舍五入
详细介绍文档: np.set_printoptions
pd.set_option
pd.set_option(pat, value)