pandas文件读取
文章目录
- 读取/写入csv文件
- 读取/写入excel文件
- 读取html转换为表格
- 案例:北京高考分数线统计分析
Pandas 是 Python 的一个功能强大且灵活的三方包,可处理标记和时间序列数据。还提供统计方法、启用绘图等功能。Pandas 的一项重要功能是能够编写和读取 Excel、CSV 和许多其他类型的文件并且能有效地进行处理文件。
当使用 Pandas 做数据分析的时,需要读取事先准备好的数据集,这是做数据分析的第一步。Panda 提供了多种读取数据的方法:
- read_csv() 用于读取文本文件
- read_excel() 读取 excel 文件
- read_html() 读取 html 表格
- read_json() 用于读取 json 文件
- read_sql_query() 读取 sql 语句的
读取/写入csv文件
read_csv() 函数的功能是可以让文件或者文件中url地址以及文件新对象中加载带有分隔符的数据,它默认分隔符是逗号
import pandas as pd
df = pd.DataFrame({'one_name':[1,2,3],'two_name':[4,5,5]})
df.to_csv("test.txt")
file = open('test.txt')
file_data = pd.read_csv(file)
print(file_data)
'''
Unnamed: 0 one_name two_name
0 0 1 4
1 1 2 5
2 2 3 5
'''
读取/写入excel文件
read_excel() 的作用:将Excel文件读取到pandas DataFrame中。
支持从本地文件系统或URL读取的xls,xlsx,xlsm,xlsb和odf文件扩展名。 支持读取单一sheet或几个sheet。
df1 = pd.DataFrame({'col1':['数','据'],'col2':['分','析']})
df1.to_excel('./test.xlsx')
excel_path='test.xlsx'
data = pd.read_excel(excel_path)
print(data)
'''
Unnamed: 0 col1 col2
0 0 数 分
1 1 据 析
'''
读取html转换为表格
read_html() 函数是最简单的爬虫,可以爬取静态网页表格数据。但只适合于爬取 table 表格型数据
import pandas as pd
import requests
html_data = requests.get("http://kaoshi.edu.sina.com.cn/college/majorlist")
html_table_data = pd.read_html(html_data.content,encoding='utf-8')
# 读取html转换为表格
# html_table_data = pd.read_html("http://kaoshi.edu.sina.com.cn/college/majorlist",encoding='utf-8') # 跟上面的方法是一样的
html_table_data[1]
'''
0 1 2 3 4
0 专业名称 专业代码 专业大类 专业小类 操作
1 哲学类 0101 哲学 哲学类 开设院校 加入对比
2 哲学 010101 哲学 哲学类 开设院校 加入对比
3 逻辑学 010102 哲学 哲学类 开设院校 加入对比
4 宗教学 010103 哲学 哲学类 开设院校 加入对比
5 伦理学 010104 哲学 哲学类 开设院校 加入对比
6 经济学类 0201 经济学 经济学类 开设院校 加入对比
7 经济学 020101 经济学 经济学类 开设院校 加入对比
8 经济统计学 020102 经济学 经济学类 开设院校 加入对比
9 国民经济管理 020103 经济学 经济学类 开设院校 加入对比
10 资源与环境经济学 020104 经济学 经济学类 开设院校 加入对比
11 商务经济学 020105 经济学 经济学类 开设院校 加入对比
12 能源经济 020106 经济学 经济学类 开设院校 加入对比
13 劳动经济学 020107 经济学 经济学类 开设院校 加入对比
14 经济工程 020108 经济学 经济学类 开设院校 加入对比
15 数字经济 020109 经济学 经济学类 开设院校 加入对比
16 财政学类 0202 经济学 财政学类 开设院校 加入对比
17 财政学 020201 经济学 财政学类 开设院校 加入对比
18 税收学 020202 经济学 财政学类 开设院校 加入对比
19 金融学类 0203 经济学 金融学类 开设院校 加入对比
20 金融学 020301 经济学 金融学类 开设院校 加入对比
'''
案例:北京高考分数线统计分析
具体要求:(http://gaokao.xdf.cn/201805/10784342.html)
- :一本文理科与二本文理科最高分数线是多少,最低的分数线是多少,相差多少?
- :2018年与2017年相比,一本文理科与二本文理科变化了多少分?
- :求2006-2018年近13年每科分数线的平均值?
import pandas as pd
data = pd.read_excel('scores.xlsx',header=[0,1],index_col=[0])
print(data)
'''
一本分数线 二本分数线
文科 理科 文科 理科
2018 576 532 488 432
2017 555 537 468 439
2016 583 548 532 494
2015 579 548 527 495
2014 565 543 507 495
2013 549 550 494 505
2012 495 477 446 433
2011 524 484 481 435
2010 524 494 474 441
2009 532 501 489 459
2008 515 502 472 455
2007 528 531 489 478
2006 516 528 476 476
'''
一本分数线 | 二本分数线 | |||
---|---|---|---|---|
文科 | 理科 | 文科 | 理科 | |
2018 | 576 | 532 | 488 | 432 |
2017 | 555 | 537 | 468 | 439 |
2016 | 583 | 548 | 532 | 494 |
2015 | 579 | 548 | 527 | 495 |
2014 | 565 | 543 | 507 | 495 |
2013 | 549 | 550 | 494 | 505 |
2012 | 495 | 477 | 446 | 433 |
2011 | 524 | 484 | 481 | 435 |
2010 | 524 | 494 | 474 | 441 |
2009 | 532 | 501 | 489 | 459 |
2008 | 515 | 502 | 472 | 455 |
2007 | 528 | 531 | 489 | 478 |
2006 | 516 | 528 | 476 | 476 |
# 一本文理科与二本文理科最高分数线是多少,最低的分数线是多少,相差多少?
score_one1_max = data['一本分数线']['理科'].max()
print("一本理科最高分数线:",score_one1_max) # 550
score_two1_max = data['二本分数线']['理科'].max()
print("二本理科最高分数线:",score_two1_max) # 505
score_one1_min = data['一本分数线']['理科'].min()
print("一本理科最低分数线:",score_one1_min) # 477
score_two1_min = data['二本分数线']['理科'].min()
print("二本理科最低分数线:",score_two1_min) # 432
print("一本理科最高分数线与一本理科最低分数线相差:",score_one1_max-score_one1_min) # 73
print("二本理科最高分数线与二本理科最低分数线相差:",score_two1_max-score_two1_min) # 73
score_one2_max = data['一本分数线']['文科'].max()
print("一本文科最高分数线:",score_one2_max) # 550
score_two2_max = data['二本分数线']['文科'].max()
print("二本文科最高分数线:",score_two2_max) # 505
score_one2_min = data['一本分数线']['文科'].min()
print("一本文科最低分数线:",score_one2_min) # 477
score_two2_min = data['二本分数线']['文科'].min()
print("二本文科最低分数线:",score_two2_min) # 432
print("一本文科最高分数线与一本文科最低分数线相差:",score_one2_max-score_one2_min) # 73
print("二本文科最高分数线与二本文科最低分数线相差:",score_two2_max-score_two2_min) # 73
'''
一本理科最高分数线: 550
二本理科最高分数线: 505
一本理科最低分数线: 477
二本理科最低分数线: 432
一本理科最高分数线与一本理科最低分数线相差: 73
二本理科最高分数线与二本理科最低分数线相差: 73
一本文科最高分数线: 583
二本文科最高分数线: 532
一本文科最低分数线: 495
二本文科最低分数线: 446
一本文科最高分数线与一本文科最低分数线相差: 88
二本文科最高分数线与二本文科最低分数线相差: 86
'''
一本文理科与二本文理科最高分数线是多少,最低的分数线是多少,相差多少?
# 一本文理科与二本文理科最高分数线是多少,最低的分数线是多少,相差多少?
print(data.max())
print(data.min())
print(data.max()-data.min())
'''
一本分数线 文科 583
理科 550
二本分数线 文科 532
理科 505
dtype: int64
一本分数线 文科 495
理科 477
二本分数线 文科 446
理科 432
dtype: int64
一本分数线 文科 88
理科 73
二本分数线 文科 86
理科 73
dtype: int64
'''
2018年与2017年相比,一本文理科与二本文理科变化了多少分?
# 2018年与2017年相比,一本文理科与二本文理科变化了多少分?
data_2018 = data.iloc[0]
data_2017 = data.iloc[1]
print(abs(data_2018-data_2017))
'''
一本分数线 文科 21
理科 5
二本分数线 文科 20
理科 7
dtype: int64
'''
求2006-2018年近13年每科分数线的平均值?
# 求2006-2018年近13年每科分数线的平均值?
data.mean()
'''
一本分数线 文科 541.615385
理科 521.153846
二本分数线 文科 487.923077
理科 464.384615
dtype: float64
'''