1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 【数据分析师_04_Python数据分析基础】001-007_Pandas基础【汇总版】(创建 筛选 索

【数据分析师_04_Python数据分析基础】001-007_Pandas基础【汇总版】(创建 筛选 索

时间:2024-06-23 19:51:38

相关推荐

【数据分析师_04_Python数据分析基础】001-007_Pandas基础【汇总版】(创建 筛选 索

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 补缺 数据库读写)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。