上手Pandas,带你玩转数据(2)-- 使用pandas从多种文件中读取数据

看,未来 2021-04-06 17:04:29
pandas 玩转 带你 上手 转数


在这里插入图片描述


pandas IO概述

关于pandas的IO,绝不止我之前写的那些,但是其他的格式我也没见过,所以就不写其他的了。

大体上有以下格式支持:
在这里插入图片描述


读取文件

读取csv文件

这里主讲read_csv函数,但是又不仅仅简单的讲一下read_csv函数。

先来看一下函数原型:

def read_csv(filepath_or_buffer: PathLike[str], # 文件名字
sep: Any = lib.no_default, # 来自定义字段之间的分隔符
header: str = "infer",
#当选择默认值或header=0时,将首行设为列名。如果列名被传入明确值就令header=None。注意,当header=0时,即使列名被传参也会被覆盖。
names: Any = None, # 列名列表的使用. 如果文件不包含列名,那么应该设置header=None。 列名列表中不允许有重复值.
index_col: Any = None,
# DataFrame的行索引列表, 既可以是字符串名称也可以是列索引. 如果传入一个字符串序列或者整数序列,那么一定要使用多级索引(MultiIndex).
# 注意: 当index_col=False ,pandas不再使用首列作为索引。
usecols: Any = None, # 返回列名列表的子集.
dtype: Any = None, # 指定某列或整体数据的数据类型. E.g. {'a': np.float64, 'b': np.int32} (不支持 engine='python').
)
#这里提供了常用参数,不代表只有这些参数

来几个示例:

在这里插入图片描述

import pandas as pd
df = pd.read_csv('test.csv')
print(df.head(7)) # 默认是5行,可以人为指定

结果:

 a b
0 1.0 2
1 3.0 4
2 NaN 5

import pandas as pd
df = pd.read_csv('test.csv',header=1) # 指定csv文件第一行为列名称
print(df.head(7)) # 默认是5行,可以认为指定

结果:

 1 2
0 3.0 4
1 NaN 5

import pandas as pd
df = pd.read_csv('test.csv',names = [1,2,3,4,5]) # 指定列名称
print(df.head(7))
 1 2 3 4 5
0 a b NaN NaN NaN
1 1 2 NaN NaN NaN
2 3 4 NaN NaN NaN
3 NaN 5 NaN NaN NaN

指定的列名称是从右往左排的,列名一定要起全,不然会有几页无法调用了。


import pandas as pd
df = pd.read_csv('test.csv',header = 0,names = ['a','b'],usecols=['a']) # 返回指定列
print(df.head())
 a
0 1.0
1 3.0
2 NaN

import pandas as pd
df = pd.read_csv('test.csv')
print(df.dtypes) #查看列类型
a float64
b int64
dtype: object

修改列类型:

import pandas as pd
df = pd.read_csv('test.csv',dtype={
'b':object}) #修改列类型
print(df.dtypes) #查看列类型
a float64
b object
dtype: object

从 StringIO 对象中读取数据

from io import StringIO
data = "name|age|birth|sex~Tom|18.0|2000-02-10|~Bob|30.0|1988-10-17|male"
df = pd.read_csv(StringIO(data), sep="|", lineterminator="~")
print(df.head())
 name age birth sex
0 Tom 18.0 2000-02-10 NaN
1 Bob 30.0 1988-10-17 male

小插曲:中文报错SyntaxError: Non-UTF-8 code starting with ‘\xe6’ in file

代码最上面加上编码格式:

#coding:utf-8

读取json文件

def read_json(path_or_buf: Any = None, # 文件路径,或网址
orient: str = None, # 预期的json格式
lines: bool = False, # 按行解析json文件
)

关于json,我就不想讲太多啦,能读能写就好啦,感觉也不会用得到吧。

以records格式读取JSON文件:
在这里插入图片描述

在这里插入图片描述


读取Excel文件

read_excel(io,sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None,usecols=None)

参数释义:

io:Excel路径
sheetname:指定工作表名或编号,编号从0开始
skiprows : 省略指定行数的数据
skip_footer :省略从尾部数的int行数据
index_col : 指定列为索引列

废话不多说,直接演示

在这里插入图片描述

实操

import pandas as pd
xls_file = '不同种类电影往年票房.xlsx'
df = pd.read_excel(xls_file).head(5)
print(df)

注意:如果说xlrd版本太高,请调低。

然后运行出来:

 上映日期 片名 总票房
0 2019 柬爱 9.63W
1 2019 那座桥 6.05W
2 2019 决战中途岛 2.92Y
3 2019 小巷管家 2433.22W
4 2019 功夫小镇 16.97W

读取指定工作表

import pandas as pd
xls_file = '不同种类电影往年票房.xlsx'
df = pd.read_excel(xls_file,sheet_name='动作').head(5) #指定读取工作表
print(df)
 上映日期 片名 总票房
0 2019 功夫小镇 16.97W
1 2019 越域重生 6.55W
2 2019 终结者:黑暗命运 3.51Y
3 2019 杨靖宇 127.81W
4 2019 二凤 61.22W

指定列名称

import pandas as pd
xls_file = '不同种类电影往年票房.xlsx'
df = pd.read_excel(xls_file,sheet_name='动作',header=1).head(5) #指定列名称
print(df)
 2019 功夫小镇 16.97W
0 2019 越域重生 6.55W
1 2019 终结者:黑暗命运 3.51Y
2 2019 杨靖宇 127.81W
3 2019 二凤 61.22W
4 2019 双子杀手 2.32Y

读取指定列

import pandas as pd
xls_file = '不同种类电影往年票房.xlsx'
df = pd.read_excel(xls_file,sheet_name='动作',usecols=['片名','总票房']).head(5) #指定列名称
print(df)

你要那个列不存在,是会报错的

 片名 总票房
0 功夫小镇 16.97W
1 越域重生 6.55W
2 终结者:黑暗命运 3.51Y
3 杨靖宇 127.81W
4 二凤 61.22W

ExcelFile 类

为了更方便地读取同一个文件的多张表格,ExcelFile类可用来打包文件并传递给read_excel。因为仅需读取一次内存,所以这种方式读取一个文件的多张表格会有性能上的优势。

xlsx = pd.ExcelFile('path_to_file.xls')
df = pd.read_excel(xlsx, 'Sheet1')
with pd.ExcelFile('path_to_file.xls') as xls:
df1 = pd.read_excel(xls, 'Sheet1')
df2 = pd.read_excel(xls, 'Sheet2')

解析日期

当读取excel文件的时候,像日期时间的值通常会自动转换为恰当的dtype(数据类型)。但是如果你有一列字符串看起来很像日期(实际上并不是excel里面的日期格式),那么你就能使用parse_dates方法来解析这些字符串为日期:

pd.read_excel('path_to_file.xls', 'Sheet1', parse_dates=['date_strings'])

单元格转换

Excel里面的单元格内容是可以通过converters方法来进行转换的。例如,把一列转换为布尔值:

pd.read_excel('path_to_file.xls', 'Sheet1', converters={
'MyBools': bool})

一列含有缺失值的整数是不能转换为具有整数dtype的数组,因为NaN严格的被认为是浮点数。你能够手动地标记缺失数据为恢复整数dtype:

def cfun(x):
return int(x) if x else -1
pd.read_excel('path_to_file.xls', 'Sheet1', converters={
'MyInts': cfun})

读取MySQL的数据库文件

这里需要一定的MySQL功底,如果不熟悉的话,建议先移步:MySQL见闻录 - 入门之旅

《深入浅出SQL》问答录

read其实就是两个函数的壳:

read_sql_query:通过一个SQL语句读取数据
read_sql_table:读取数据库中的一个表(table)
pandas.read_sql(sql, con, index_col=None,columns=None)

参数释义:

sql:表名、SQL语句
con:建立连接
index_col:索引列

测试

环境配置:
首先你需要有安装MySQL环境,这些在这里都不多说,上面那篇MySQL入门之旅很详细。

整完之后,开个户:
在这里插入图片描述

from sqlalchemy import create_engine
import pandas as pd
# mysql+pymysql://用户名:密码@服务器IP/数据库名
engine = create_engine('mysql+pymysql://pandas:pandas@localhost/pandas')
# 我这里又换新人了
print(engine.execute('show tables').fetchall())
# 配置引擎,并确定引擎可用

除了代码中的那个包,还要安装两个包。
pymysql和cryctography、

[('presidents',)]

from sqlalchemy import create_engine
import pandas as pd
engine = create_engine('mysql+pymysql://pandas:pandas@localhost/pandas')
print(pd.read_sql('presidents',con=engine))

表里面什么都没有,自然什么都读不出来了。

Empty DataFrame
Columns: [last_name, first_name]
Index: []

from sqlalchemy import create_engine
import pandas as pd
engine = create_engine('mysql+pymysql://pandas:pandas@localhost/pandas')
#print(pd.read_sql('presidents',con=engine,index_col='first_name')) # 使用索引列
pd.read_sql('select * from presidents',con=engine) # 直接使用SQL语句

由于表中没有数据,所以什么也读不出来。


版权声明
本文为[看,未来]所创,转载请带上原文链接,感谢
https://lion-wu.blog.csdn.net/article/details/115460511

  1. 商业数据分析从入门到入职(7)Python基础数据结构及其操作
  2. 商业数据分析从入门到入职(6)Python程序结构和函数
  3. Business data analysis from entry to entry (9) Python Network Data Acquisition
  4. Business data analysis from entry to entry (8) Python module, file IO and object oriented
  5. Business data analysis from entry to entry (7) Python basic data structure and its operation
  6. Business data analysis from entry to entry (6) Python program structure and function
  7. 简简单单实现 Python Web 的登录注册页面,还包含一半逻辑。
  8. Simple implementation of Python web login registration page, but also contains half of the logic.
  9. 什么是pip?Python新手入门指南
  10. What is PIP? Getting started with Python
  11. Python uses for... Else to jump out of double nested loop
  12. Python基础之:Python中的内部对象
  13. 人工智能入门:Python实现机器学习
  14. The foundation of Python: inner objects in Python
  15. Introduction to artificial intelligence: machine learning in Python
  16. Python基础之:Python中的内部对象
  17. The foundation of Python: inner objects in Python
  18. Python 小技之 Office 文件转 PDF
  19. 还在为多张Excel汇总统计发愁?Python 秒处理真香!
  20. 用 Python 制作音乐聚合下载器
  21. Spark Delta Lake 0.4.0 发布,支持 Python API 和部分 SQL
  22. How to transfer office files to PDF
  23. Are you still worried about multiple excel summary statistics? Python second processing really fragrant!
  24. Making music aggregate downloader with Python
  25. Spark delta Lake 0.4.0 is released, supporting Python API and part of SQL
  26. Python信息搜集
  27. Python information gathering
  28. Python - 关于类(self/cls) 以及 多进程通讯的思考
  29. Python - thinking about class (self / CLS) and multi process communication
  30. Python - 关于类(self/cls) 以及 多进程通讯的思考
  31. Python - thinking about class (self / CLS) and multi process communication
  32. Python信用评分卡建模(附代码)
  33. Python credit score card modeling (with code)
  34. 学Python需要学数据库吗?Python学习教程!
  35. Do you need to learn database to learn Python!
  36. Python私有变量如何定义?Python学习教程!
  37. How to define Python private variables? Python tutorial!
  38. Python数据分析入门(六):Pandas的函数应用
  39. Introduction to Python data analysis (6): function application of pandas
  40. 学Python需要学数据库吗?Python学习教程!
  41. Do you need to learn database to learn Python!
  42. Python描述 LeetCode 80. 删除有序数组中的重复项 II
  43. C++/python描述 AcWing 94. 递归实现排列型枚举
  44. C++/python描述 AcWing 92. 递归实现指数型枚举
  45. Python描述 LeetCode 88. 合并两个有序数组
  46. 苏州大学计算机考研 复试机试真题2013-2021真题及Python题解
  47. Python描述 LeetCode 781. 森林中的兔子
  48. 字典和json的区别是什么?Python学习
  49. Python describes leetcode 80. Removing duplicate items from ordered arrays II
  50. C + + / Python description acwing 94. Recursive implementation of permutation enumeration
  51. C + + / Python description acwing 92. Recursive implementation of exponential enumeration
  52. Python describes leetcode 88. Merging two ordered arrays
  53. Real computer test questions 2013-2021 of computer postgraduate entrance examination of Soochow University and python solutions
  54. The rabbit in the forest
  55. Python中的魔法属性
  56. What's the difference between dictionary and JSON? Python learning
  57. Magic properties in Python
  58. 字典和json的区别是什么?Python学习
  59. What's the difference between dictionary and JSON? Python learning
  60. python刷题-字母图形