上手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:[email protected]/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:[email protected]/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:[email protected]/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. 利用Python爬虫获取招聘网站职位信息
  2. Using Python crawler to obtain job information of recruitment website
  3. Several highly rated Python libraries arrow, jsonpath, psutil and tenacity are recommended
  4. Python装饰器
  5. Python实现LDAP认证
  6. Python decorator
  7. Implementing LDAP authentication with Python
  8. Vscode configures Python development environment!
  9. In Python, how dare you say you can't log module? ️
  10. 我收藏的有关Python的电子书和资料
  11. python 中 lambda的一些tips
  12. python中字典的一些tips
  13. python 用生成器生成斐波那契数列
  14. python脚本转pyc踩了个坑。。。
  15. My collection of e-books and materials about Python
  16. Some tips of lambda in Python
  17. Some tips of dictionary in Python
  18. Using Python generator to generate Fibonacci sequence
  19. The conversion of Python script to PyC stepped on a pit...
  20. Python游戏开发,pygame模块,Python实现扫雷小游戏
  21. Python game development, pyGame module, python implementation of minesweeping games
  22. Python实用工具,email模块,Python实现邮件远程控制自己电脑
  23. Python utility, email module, python realizes mail remote control of its own computer
  24. 毫无头绪的自学Python,你可能连门槛都摸不到!【最佳学习路线】
  25. Python读取二进制文件代码方法解析
  26. Python字典的实现原理
  27. Without a clue, you may not even touch the threshold【 Best learning route]
  28. Parsing method of Python reading binary file code
  29. Implementation principle of Python dictionary
  30. You must know the function of pandas to parse JSON data - JSON_ normalize()
  31. Python实用案例,私人定制,Python自动化生成爱豆专属2021日历
  32. Python practical case, private customization, python automatic generation of Adu exclusive 2021 calendar
  33. 《Python实例》震惊了,用Python这么简单实现了聊天系统的脏话,广告检测
  34. "Python instance" was shocked and realized the dirty words and advertisement detection of the chat system in Python
  35. Convolutional neural network processing sequence for Python deep learning
  36. Python data structure and algorithm (1) -- enum type enum
  37. 超全大厂算法岗百问百答(推荐系统/机器学习/深度学习/C++/Spark/python)
  38. 【Python进阶】你真的明白NumPy中的ndarray吗?
  39. All questions and answers for algorithm posts of super large factories (recommended system / machine learning / deep learning / C + + / spark / Python)
  40. [advanced Python] do you really understand ndarray in numpy?
  41. 【Python进阶】Python进阶专栏栏主自述:不忘初心,砥砺前行
  42. [advanced Python] Python advanced column main readme: never forget the original intention and forge ahead
  43. python垃圾回收和缓存管理
  44. java调用Python程序
  45. java调用Python程序
  46. Python常用函数有哪些?Python基础入门课程
  47. Python garbage collection and cache management
  48. Java calling Python program
  49. Java calling Python program
  50. What functions are commonly used in Python? Introduction to Python Basics
  51. Python basic knowledge
  52. Anaconda5.2 安装 Python 库(MySQLdb)的方法
  53. Python实现对脑电数据情绪分析
  54. Anaconda 5.2 method of installing Python Library (mysqldb)
  55. Python implements emotion analysis of EEG data
  56. Master some advanced usage of Python in 30 seconds, which makes others envy it
  57. python爬取百度图片并对图片做一系列处理
  58. Python crawls Baidu pictures and does a series of processing on them
  59. python链接mysql数据库
  60. Python link MySQL database