pandas库

pandas 是基于Numpy的一种工具,主要用于数据分析任务。Pandas 纳入了大量库和一些标准的数据模型,提供了高校第操作大型数据集所需要的工具。pandas 的名称来自面板数据(panel data)和python数据分析(data analysis)。

  • 可以从CSV、JSON、SQL、Microsoft Excel导入数据
  • 主要数据结构Series(一维数据)和DataFrame(二维数据)
1
2
3
4
5
6
7
8
9
10
11
12
# pandas 简单实例
>>> import pandas as pd
>>> mydataset = {
'sites':['Google','Runoob','Wiki'],
'number':[1,2,3]
}
>>> myvar = pd.DataFrame(mydataset)
>>> myvar
sites number
0 Google 1
1 Runoob 2
2 Wiki 3

Pandas Series

  • pandas series类似表格的一列,类似一维数组。
  • 可以用list 和key/value对象创建Series

  • 由索引(index)和列组成

Series构造方法如下:

pandas.Series(data,index,dtype,name,copy)

data:数据(ndarray类型) index:索引标签,默认从0开始 dtype:数据类型,默认自己判断 name:名称 copy:拷贝数据,默认False

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> import pandas as pd
>>> a = [1,2,3]
>>> myvar = pd.Series(a)
>>> myvar
0 1
1 2
2 3
dtype: int64
>>> sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
>>> myvar = pd.Series(sites, index = [1, 2], name="aike" )
>>> myvar
1 Google
2 Runoob
Name: aike, dtype: object

Pandas DataFrame

  • 表格类型数据
  • 既有行索引,也有列索引

DataFrame构造方法:

pandas.DataFrame(data,index,columns,dtype,copy)

columns:列标签,默认为RangeIndex(0,1,2,……,n)

1
2
3
4
5
6
7
8
>>> import pandas as pd
>>> data = [['Google',10],['Runoob',12],['Wike',13]]
>>> df = pd.DataFrame(data,columns=['Site','Age'],dtype=float)
>>> df
Site Age
0 Google 10.0
1 Runoob 12.0
2 Wike 13.0
  • loc[ ]:返回指定索引的行

  • loc[[ ]]:返回多行数据

Pandas CSV文件

CSV(Comma-Separated Values,逗号分隔值)一般用逗号分割,以纯文本数据存储表格数据(数字和文本)。

  • pd.to_string( ):返回DataFrame类型数据
  • pd.read_csv( ):读取csv数据
  • pd.to_csv( ):将DataFrame存储为csv文件
  • df.head(n):读取回前n行
  • df.tail(n):读取尾部几行
  • df.info( ):返回表格基本信息(行列数、各列数据类型)
1
2
3
import pandas as pd
df = pd.read_csv('nba.csv')
print(df)

Pandas JSON

JSON(JavaScript Object Notation,JavaScript对象表示法),存储和交换文本信息的语法。

  • Json可转换为DataFrame
  • 可以从url中读取json数据
  • 读取内嵌json
    • pd.json_normalize(data, record_path, meta)
1
2
3
4
5
6
7
8
9
10
import pandas as pd
import json

# 使用 Python JSON 模块载入数据
with open('nested_list.json','r') as f:
data = json.loads(f.read())

# 展平数据
df_nested_list = pd.json_normalize(data, record_path =['students'])
print(df_nested_list)
  • 安装glom模块:用.来访问内嵌对象的属性

Pandas 数据清洗

  • 缺失
  • 格式错误
  • 错误数据或重复数据
清洗空值
  • dropna( ):删除包含空字段的行

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

pdfminer库

问题描述

利用python读取PDF文本内容

运行环境

python 3.6

需要安装的库

1
2
pip install pdfminer
pip install pdfminer3k

实现的源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import pyocr # 图像处理库,进行ocr识别
import importlib # Python中import语句的实现
import sys # 针对与Python解释器相关的变量和方法
import time # 基础时间库

importlib.reload(sys)
time1 = time.time()
# print('初始时间为:',time1)

import os.path
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal,LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed

text_path = r'D:\文档\预测与决策\第2章 非模型预测方法.pdf'

def parse():
#解析PDF文本,并保存到TXT文件中
fp = open(text_path,'rb')
#用文件对象创建一个PDF文档分析器
parser = PDFParser(fp)
#创建一个PDF文档
doc = PDFDocument()
#连接分析器,与文档对象
parser.set_document(doc)
doc.set_parser(parser)

#提供初始化密码,如果没有密码,就创建一个空的字符串
doc.initialize()

#检测文档是否提供txt转换,不提供就忽略
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
else:
#创建PDF,资源管理器,来共享资源
rsrcmgr = PDFResourceManager()
#创建一个PDF设备对象
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr,laparams=laparams)
#创建一个PDF解释器其对象
interpreter = PDFPageInterpreter(rsrcmgr,device)

#循环遍历列表,每次处理一个page内容
#doc.get_pages()获取page列表
for page in doc.get_pages():
interpreter.process_page(page)
#接受该页面的LTPage对象
layout = device.get_result()
# 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象
# 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等
# 想要获取文本就获得对象的text属性,
for x in layout:
if(isinstance(x,LTTextBoxHorizontal)):
with open(r'C:\Users\86159\Desktop\2.txt','a',encoding='utf-8') as f:
results = x.get_text()
print(results)
f.write(results + "\n")

if __name__ == '__main__':
parse()
time2 = time.time()
print('总共消耗时间为:',time2-time1)

结果分析

将读取的文字存在一个TXT文档里面

pdfminer只能识别pdf里的文字,而不会读取pdf里图片里的文字内容

参考链接

https://www.cnblogs.com/wj-1314/p/9429816.html