Pandas基础(汇总版)
1 Pandas的功能介绍1.1 什么是Pandas1.2 Pandas的起源1.3 安装Pandas环境(JuypterNotebook) 2 数据框体Dataframe的基本使用2.1 用 Dict创建 DataFrame2.2 用 CSV文件创建 DataFrame2.3 DataFrame的行列式访问2.4 DataFrame的常规操作(筛选,组合筛选)2.5 DataFrame的索引 Index 3 DataFrame的创建模式(5种)3.1 CSV to DataFrame3.2 XLSX to DataFrame3.3 Dict-List to DataFrame3.4 List-Turple to DataFrame3.5 List-Dict to Dataframe 4 Pandas读写 CSV、EXCEL4.1 CSV 的读取4.2 CSV 的写入4.3 EXCEL 的读取4.4 EXCEL 的写入 5 N/A 缺失数据的补偿方法5.1 填充缺失数据5.2 使用 `fillna` 填充数据5.3 使用 `interpolate` 拟合数据5.4 使用 `dropna` 删除缺失的数据 6 Replace 替换缺失数据6.1 单值替换6.2 多值替换6.3 列表替换6.4 re正则替换 7 数据库数据内容的读取和写入7.1 利用sql接口访问数据库7.2 读取 MySQL的数据7.2.1 两种方式读取 MySQL的 Table7.2.2 使用 MySQL的 Query功能读取特定数据 7.3 使用to_sql进行数据写入转载请注明出处 😃!
手动反爬:Pandas基础【汇总版】(创建、筛选、索引、读写CSV EXCEL、补缺、数据库读写) /Lyun911/article/details/112388711
注:以下使用 Jupyter Notebook 演示
1 Pandas的功能介绍
1.1 什么是Pandas
Pandas 是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的
Pandas 是学习数据分析的基础
Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具
(因为Pandas 用C语言编写的,比Python原生的 Dict和 List快100倍左右)
Pandas提供了大量能使我们快速便捷地处理数据的函数和方法
Pandas是使Python成为强大而高效的数据分析环境的重要因素之一
1.2 Pandas的起源
Pandas在成为开源项目,是一个在真实世界中广泛应用的大型类库,Pandas的开发者社区有超过800个代码贡献者,他们帮助构建了项目,并将Pandas应用到日常中去解决他们的数学难题
现在的数据分析基本上有99%是基于Pandas的数据类库
1.3 安装Pandas环境(JuypterNotebook)
Pandas官网:/
在jupyter notebook
中安装:
打开cmd - jupyter note book
键入!pip install pandas
即可
(也可以直接在cmd 中 pip)
2 数据框体Dataframe的基本使用
DataFrame是一种表格型数据结构,它含有一组有序的列,每列可以是不同的值
DataFrame既有行索引,也有列索引,它可以看作是由Series组成的字典,不过这些Series共用一个索引
DataFrame的创建有多种方式,不过最重要的还是根据dict进行创建,以及读取csv或者txt文件来创建
2.1 用 Dict创建 DataFrame
import pandas as pdweather_data = {'day': ['1/1/', '1/2/', '1/3/', '1/4/', '1/5/'],'temperature' :[10, 13, 16, 19, 22],'windspeed' :[9, 8, 7, 6, 5],'event' :['Rainny', 'Snowy', 'Sunny', 'Sunny', 'Sunny']}df = pd.DataFrame(weather_data)
2.2 用 CSV文件创建 DataFrame
import pandas as pddf = pd.read_csv('order_leads.csv')print(df)
2.3 DataFrame的行列式访问
import pandas as pdweather_data = {'day': ['1/1/', '1/2/', '1/3/', '1/4/', '1/5/'],'temperature' :[10, 13, 16, 19, 22],'windspeed' :[9, 8, 7, 6, 5],'event' :['Rainny', 'Snowy', 'Sunny', 'Sunny', 'Sunny']}df = pd.DataFrame(weather_data)df.head()# Head从前往后(ROW)df.tail()# Tail从后往前(ROW)df[1: 2]# Slicing切片器(ROW)df.event# 访问一列(COLUMN)type(df.event)# 数据类型为 'pandas.core.series.Series'df[['day', 'temperature']]# 访问多列(COLUMN)type(df[['day', 'temperature']])# 数据类型为 'pandas.core.frame.DataFrame'
2.4 DataFrame的常规操作(筛选,组合筛选)
import pandas as pdweather_data = {'day': ['1/1/', '1/2/', '1/3/', '1/4/', '1/5/'],'temperature' :[10, 13, 16, 19, 22],'windspeed' :[9, 8, 7, 6, 5],'event' :['Rainny', 'Snowy', 'Sunny', 'Sunny', 'Sunny']}df = pd.DataFrame(weather_data)dfdf.temperature.max()df.temperature > 15df[df.temperature > 15]df[['day', 'event']][df.temperature > 15]
2.5 DataFrame的索引 Index
import pandas as pdweather_data = {'day': ['1/1/', '1/2/', '1/3/', '1/4/', '1/5/'],'temperature' :[10, 13, 16, 19, 22],'windspeed' :[9, 8, 7, 6, 5],'event' :['Rainny', 'Snowy', 'Sunny', 'Sunny', 'Sunny']}df = pd.DataFrame(weather_data)df.set_index('day')# 设置某一字段为索引 indexdf.index# 可以看出,以上方式设置索引值没有真正改变索引(需要加 'inplace = True'参数)df.set_index('day', inplace = True)# 加上'inplace = True'参数以后就真正的改变了索引df.indexdf.loc[['1/1/', '1/2/']]# 用索引号检索数据df.reset_index(inplace = True)# 重置索引号,记得加上'inplace = True'参数df.index
3 DataFrame的创建模式(5种)
3.1 CSV to DataFrame
weather_data.csv
weather_data2.csv
import pandas as pd# 使用csv 读取含有表头的数据:df = pd.read_csv('weather_data.csv')# 使用csv 读取数据# 使用csv 读取没有表头的数据:# df = pd.read_csv('weather_data2.csv')# 使用csv 读取没有表头的数据(错误示范)df = pd.read_csv('weather_data2.csv', header = None)# 使用csv 读取没有表头的数据(正确示范)df.columns = ['day', 'temperature', 'windspeed', 'event']# 手动添加字段头
3.2 XLSX to DataFrame
weather_data.xlsx
如果没有安装 openpyxl 包的话要先安装一下
# !pip install -i https://pypi.tuna./simple openpyxldf = pd.read_excel('weather_data.xlsx', 'Sheet1')# 读取exceldf
3.3 Dict-List to DataFrame
# Dict-List to DataFrame 字典-列表生成DFweather_data = {'day': ['1/1/', '1/2/', '1/3/', '1/4/', '1/5/'],'temp' :[10, 13, 16, 19, 22],'windspeed' :[9, 8, 7, 6, 5]}df = pd.DataFrame(weather_data)event = ['Rainny', 'Snowy', 'Sunny', 'Sunny', 'Sunny']df['event'] = eventdf
3.4 List-Turple to DataFrame
# List-Turple to DataFrame 列表-元祖生成DFweather_data = [('1/1/', 10, 9, 'Rainny'),('1/2/', 13, 8, 'Snowy'),('1/3/', 16, 7, 'Sunny')]df = pd.DataFrame(data = weather_data,columns = ['day', 'temp', 'windspeed', 'event'])df
3.5 List-Dict to Dataframe
# List-Dict to Dataframe 列表-字典生成DFweather_data = [{'day':'1/1/', 'temp':10, 'windspeed':9, 'event':'Rainny'},{'day':'1/2/', 'temp':13, 'windspeed':8, 'event':'Snowy'},{'day':'1/3/', 'temp':16, 'windspeed':7, 'event':'Sunny'}]df = pd.DataFrame(weather_data)df
4 Pandas读写 CSV、EXCEL
利用Pandas进行数据的输入和输出通常会有:CSV,Excel,Table 等方式
4.1 CSV 的读取
stock_data.csv
import pandas as pd# 读取 csv文件df = pd.read_csv('stock_data.csv')# 跳过第2和3行df = pd.read_csv('stock_data.csv', skiprows = [2, 3])# 增加并自定义行头df = pd.read_csv('stock_data.csv', header = None, names = ['a', 'b', 'c', 'd', 'e'])# 只读取前n行数据df = pd.read_csv('stock_data.csv', nrows = 3)
4.2 CSV 的写入
# 输出到 csv文件df.to_csv('Out.csv')# 输出的 csv文件中不保留 index行头df.to_csv('Out2.csv', index = None)# 输出的 csv文件中 header行头df.to_csv('Out3.csv', header = None)# 输出的 csv文件中仅包含某些列df.to_csv('Out3.csv', columns = ['tickers', 'price'])
4.3 EXCEL 的读取
简单的读取:
df = pd.read_excel('stock_data.xlsx', 'Sheet1')
读取时,将空值自动填充为某值:
def convert_price(t):if t == 'n.a.':return 0return tdf = pd.read_excel('stock_data.xlsx','Sheet1',converters = {'price': convert_price})
4.4 EXCEL 的写入
简单的写入:
df2 = pd.read_csv('weather_data.csv')df2.to_excel('weather_data_out.xlsx',sheet_name = 'weather',index = False)
从某行某列写入数据:
df2.to_excel('weather_data_out2.xlsx',sheet_name = 'weather',index = False,startrow = 1,startcol = 2)
分别写入两段数据到两个 Sheet中:
with pd.ExcelWriter('combine.xlsx') as writer:# 写入一次 exceldf.to_excel(writer, sheet_name = 'df1')# 其中 df写入 df1表格df2.to_excel(writer, sheet_name = 'df2')# 其中 df2写入 df2表格
5 N/A 缺失数据的补偿方法
5.1 填充缺失数据
首先创建一个DF:
import pandas as pddf = pd.read_csv('weather_data.csv',parse_dates = ['day'])# 某列数据类型为datedf.info()# 查看DF的信息type(df.day[0])# day限定的是列,[0]限定的是行,可以定位到某个坐标的数据df.iloc[0, 0]# 这是个绝对坐标,同样可以定位到某个坐标的数据df.set_index('day',inplace=True)# 这句非常重要!!!!!
5.2 使用fillna
填充数据
Fillna
用来填充缺失的数据值
newdf = df.fillna(0)newdf = df.fillna({'temperature':8888,'event':'No Event','windspeed':9999})newdf = df.fillna(method = 'ffill')# 用上一行的数据填充N/A(↓)newdf = df.fillna(method = 'ffill', axis = 'columns')# 用上一列的数据填充N/A(→)newdf = df.fillna(method = 'bfill')# 用下一行的数据填充N/A(↑)newdf = df.fillna(method = 'bfill', axis = 'columns')# 用下一列的数据填充N/A(←)newdf = df.fillna(method = 'ffill', limit = 1)# 用上一行的数据填充N/A(↓),只向下填充1个(limit)
可以自行查看文档(read_csv parse_dates = [‘day’])
5.3 使用interpolate
拟合数据
Interpolate
用拟合函数来进行缺失值的猜测
newdf = df.interpolate()# 数据拟合(自动设置步长值 step进行填充)线性函数法# 注:此处要有上面一行命令:"df.set_index('day',inplace=True)" 才能执行newdf = df.interpolate(method = 'time')# 数据拟合(自动设置步长值 step进行填充)时间法
注:method = ‘time’ 时,要先设置时间为索引:“df.set_index(‘day’,inplace=True)” 才能执行
5.4 使用dropna
删除缺失的数据
dropna
删除缺失的数据
newdf = df.dropna()# 把所有包含N/A的行给删除newdf = df.dropna(how = 'all')# 把一整行全都是N/A的行给删除newdf = df.dropna(thresh = 2)# 有>=2个数据的行保留(预警值)
查看文档:
6 Replace 替换缺失数据
首先创建一个 DF
import pandas as pdimport numpy as npdf = pd.read_csv('weather_data.csv')
6.1 单值替换
# 替换单个数据newdf = df.replace(-99999,value = np.NaN)
6.2 多值替换
# 替换一组数据(1)newdf = df.replace(to_replace = [-99999, -88888],value = np.NaN)# 使用map表进行数据替换:替换一组数据(2)newdf = df.replace({-99999: np.nan,'0': 'No Event',-88888: 10})# 替换特定列的特定内容,替换一组数据(3)newdf = df.replace({'temperature':-99999,'windspeed':[-99999, -88888],'event':'0'},np.nan)
6.3 列表替换
df = pd.DataFrame({'score': ['perfect', 'good', 'average', 'poor']})df.replace(['perfect', 'good', 'average', 'poor'],[5, 4, 3, 1],inplace = True)df
6.4 re正则替换
newdf = df.replace({'event': '[A-Za-z]'},'',regex = True)# re正则表达式替换法
7 数据库数据内容的读取和写入
数据库除了之前介绍的csv、excel类数据外,也是可以利用pandas直接操作的数据来源
pandas.read_sql
可以在数据库中执行指定的SQL语句查询或对整张表进行查询,以DataFrame 的类型返回查询结果,这是在跟数据库进行交互操作时很重要的一步:既读取数据,还返回DataFrame方便处理
思路:把 Pandas作为出具处理的过程,把 MySQL作为数据存储的仓库
重点:构建 engine(存储服务器和用户信息)和 query(存储 MySQL查询语句)放入pd.read_sql_query()
操作
7.1 利用sql接口访问数据库
# 首先从服务打开 MySQL服务器# !pip install pymysql# !pip install flask-SQLAlchemy# 安装用到的两个库import pandas as pdimport sqlalchemy# 用的是 mysql+和 pymysql的驱动,账户root,密码,服务器位置,用到的db# 在这里构建一个 engine,用于之后的查询# 如果有多个数据库账户或者接口,创建多个 engine即可engine = sqlalchemy.create_engine('mysql+pymysql://root:1235@localhost:3306/erp')
7.2 读取 MySQL的数据
7.2.1 两种方式读取 MySQL的 Table
1、使用 Python语句的方式读取 table
df = pd.read_sql_table('customers', engine)# 把上面的 engine放进来
2、使用 SQL语句的方式读取 table
query = '''SELECT * FROM customers;'''df_sql = pd.read_sql_query(query, engine)# 把上面的 engine放进来
7.2.2 使用 MySQL的 Query功能读取特定数据
# 使用 SQL语句的方式读取 table中的内容query = '''SELECT * FROM customers WHERE `cust_name` = 'Mouse House';'''df2 = pd.read_sql_query(query, engine)# 把上面的查询语句 query和 engine放进来df2
7.3 使用to_sql进行数据写入
为了测试 to_sql,先创建一个空的表格,然后把查询到的,或者新的内容放进去
在 MySQL-NewQuery 中键入一下内容以新建一张空 Table:
CREATE TABLE customers2 AS SELECT * FROM customers;DELETE FROM customers2;
然后在 Python中将数据录入到新表 customers2中:
df2.to_sql(name = 'customers2',# 添加到的表名为 customers2con = engine,# 用 engine中的账号连接,con是 connection的意思if_exists = 'append',# 插入到最后index = False# 不把 index索引添加到数据库中)
这就添加成功了:
【数据分析师_04_Python数据分析基础】001-007_Pandas基础【汇总版】(创建 筛选 索引 读写CSV EXCEL 补缺 数据库读写)