pandas入门笔记
pandas:python的数据分析库
pandas是一个开源的,BSD许可的库,为Python编程语言提供高性能,易于使用的数据结构和数据分析工具。
安装方法:
在终端中使用conda安装。(推荐使用)
conda install pandas
使用pip安装
pip install pandas
pandas数据结构
- Series(系列):一维的表现形式,一组数据,
- DataFrame(数据帧):二维的表现形式,可以理解为一张表
- Panel(面板):三维的表现形式,可以理解为DataFrame的容器
pandas的数据类型都是以numpy为基础构建的,这说明他们的快!!!
数据表的基本操作Example:
eg1:
import pandas as pd
# 定义一个Series系列
s = pd.Series([1, 5, 6, 5, 8, 9])
print(s)
# print(s.sort_values()) # 排序 1,5,5,6,8,9
# print(s[0]) # 通过下标访问数据,返回第一个数据 1
程序执行结果:
C:\Users\009\Anaconda3\python.exe C:/Users/009/Desktop/PycharmProject/Test/Test.py
0 1
1 5
2 6
3 5
4 8
5 9
dtype: int64
Process finished with exit code 0
简单的输出了Series的数据!!!
eg2:
score = {'Day': [1, 2, 3, 4, 5, 6],
'Chinese': [43, 34, 65, 56, 29, 76],
'Math': [65, 67, 78, 65, 45, 52],
'English': [50, 67, 80, 60, 75, 92]
}
# 将数据加载到DataFrame中
df = pd.DataFrame(score)
print(df)
程序执行结果:
C:\Users\009\Anaconda3\python.exe C:/Users/009/Desktop/PycharmProject/Test/Test.py
Day Chinese Math English
0 1 43 65 50
1 2 34 67 67
2 3 65 78 80
3 4 56 65 60
4 5 29 45 75
5 6 76 52 92
Process finished with exit code 0
这个是不是有一种数据表的样子啊,这就是DataFrame的二维数据表的样子
eg3:
import pandas as pd
score = {'Day': [1, 2, 3, 4, 5, 6],
'Chinese': [43, 34, 65, 56, 29, 76],
'Math': [65, 67, 78, 65, 45, 52],
'English': [50, 67, 80, 60, 75, 92]
}
# 将数据加载到DataFrame中
df = pd.DataFrame(score)
# 显示数据的前6行,默认是显示前5行
print(df.head(6))
# 显示倒序的前2行,默认是显示后5行
print(df.tail(2))
"""
显示表的描述信息
count:数据行数,
mean:平均数,
std:标准差,
min:最小值,
25%:百分位数25,
50%:中位数,
75%:百分位数75,
max:最大值
"""
print(df.describe())
# 获取DataFrame的键,返回的是一个对象,可通过下标访问值,
print(df.keys())
# 返回一个二维的数组
print(df.values)
程序执行结果:
C:\Users\009\Anaconda3\python.exe C:/Users/009/Desktop/PycharmProject/Test/Test.py
Day Chinese Math English
0 1 43 65 50
1 2 34 67 67
2 3 65 78 80
3 4 56 65 60
4 5 29 45 75
5 6 76 52 92
Day Chinese Math English
4 5 29 45 75
5 6 76 52 92
Day Chinese Math English
count 6.000000 6.000000 6.000000 6.000000
mean 3.500000 50.500000 62.000000 70.666667
std 1.870829 18.338484 11.730303 14.935417
min 1.000000 29.000000 45.000000 50.000000
25% 2.250000 36.250000 55.250000 61.750000
50% 3.500000 49.500000 65.000000 71.000000
75% 4.750000 62.750000 66.500000 78.750000
max 6.000000 76.000000 78.000000 92.000000
Index(['Day', 'Chinese', 'Math', 'English'], dtype='object')
[[ 1 43 65 50]
[ 2 34 67 67]
[ 3 65 78 80]
[ 4 56 65 60]
[ 5 29 45 75]
[ 6 76 52 92]]
Process finished with exit code 0
eg4:此程序的数据使用的是前面的数据,为了贴代码的精确性,不重复的贴代码
# 通过标签的值获取数据 : 代表全部
print(df.loc[:, ["Day", "Math"]])
print("----------------------------------->")
# 通过标签的下标获取数据,
print(df.iloc[:, [0, 2]])
print("----------------------------------->")
# 调换数据
print(df.T)
print("----------------------------------->")
# 去重查看某一列的唯一值,
print(df["Math"].unique())
print("----------------------------------->")
"""
set_index方法的作用就是设置索引,
下面讲解的是inplace的作用,
inplace 不设置的时候 是不修改数据的本身
但是加上inplace就是修改数据的本身
"""
df.set_index("Day")
print(df)
df.set_index("Day",inplace=True)
print(df)
程序执行结果:
C:\Users\009\Anaconda3\python.exe C:/Users/009/Desktop/PycharmProject/Test/Test.py
Day Math
0 1 65
1 2 67
2 3 78
3 4 50
4 5 45
5 6 65
----------------------------------->
Day Math
0 1 65
1 2 67
2 3 78
3 4 50
4 5 45
5 6 65
----------------------------------->
0 1 2 3 4 5
Day 1 2 3 4 5 6
Chinese 43 34 65 56 29 76
Math 65 67 78 50 45 65
English 50 67 80 60 75 92
----------------------------------->
[65 67 78 50 45]
----------------------------------->
Day Chinese Math English
0 1 43 65 50
1 2 34 67 67
2 3 65 78 80
3 4 56 50 60
4 5 29 45 75
5 6 76 65 92
Chinese Math English
Day
1 43 65 50
2 34 67 67
3 65 78 80
4 56 50 60
5 29 45 75
6 76 65 92
Process finished with exit code 0
数据清洗的Example
eg1:
import pandas as pd
score = {'Day': [1, 2, 3, 4, 5, 6],
'Chinese': [43, 34, 65, 56, 29, 76],
'Math': [65, "", 78, 50, 50, 65],
'English': [50, 67, 80, 60, "", 92]
}
# 将数据加载到DataFrame中
df = pd.DataFrame(score)
# 替换数据,将数据表中的空替换成60
print(df.replace("", 60))
print("--------------------------------------")
# 更换数据格式
print(df["Chinese"].astype("float"))
print("--------------------------------------")
# 删除后出现的重复值
print(df["Math"].drop_duplicates())
print("--------------------------------------")
# 删除先出现的重复值
print(df["Math"].drop_duplicates(keep='last'))
print("--------------------------------------")
程序执行结果:
C:\Users\009\Anaconda3\python.exe C:/Users/009/Desktop/PycharmProject/Test/Test.py
Day Chinese Math English
0 1 43 65 50
1 2 34 60 67
2 3 65 78 80
3 4 56 50 60
4 5 29 50 60
5 6 76 65 92
--------------------------------------
0 43.0
1 34.0
2 65.0
3 56.0
4 29.0
5 76.0
Name: Chinese, dtype: float64
--------------------------------------
0 65
1
2 78
3 50
Name: Math, dtype: object
--------------------------------------
1
2 78
4 50
5 65
Name: Math, dtype: object
--------------------------------------
Process finished with exit code 0
数据处理Example
eg1:
# 设置指定行排序 在前面的权重高,
print(df.sort_values(by=["Math","Day"]))
# 按照索引来排序
print(df.sort_index())
# 如果制定列的数据大于等于60的设置为及格 就是不符合要求的
print(df.where(df < 60, "及格"))
# 与where相反
print(df.mask(df > 60,"及格"))
# 找出Math与English都大于60的
print(df.loc[(df["Math"] > 60) & (df["English"] > 60), ["Math", "English"]])
程序执行结果:
C:\Users\009\Anaconda3\python.exe C:/Users/009/Desktop/PycharmProject/Test/Test.py
Day Chinese Math English
3 4 56 50 60
4 5 29 50 75
0 1 43 65 70
5 6 76 65 92
2 3 65 78 80
1 2 34 80 67
Day Chinese Math English
0 1 43 65 70
1 2 34 80 67
2 3 65 78 80
3 4 56 50 60
4 5 29 50 75
5 6 76 65 92
Day Chinese Math English
0 1 43 及格 及格
1 2 34 及格 及格
2 3 及格 及格 及格
3 4 56 50 及格
4 5 29 50 及格
5 6 及格 及格 及格
Day Chinese Math English
0 1 43 及格 及格
1 2 34 及格 及格
2 3 及格 及格 及格
3 4 56 50 60
4 5 29 50 及格
5 6 及格 及格 及格
Math English
0 65 70
1 80 67
2 78 80
5 65 92
Process finished with exit code 0
数据统计Example:
eg1:
# 统计Math的出现次数
print(df.groupby(by="Math")["Math"].count())
# 获取分组后的和,和个数
print(df.groupby(by="Math")["Math"].agg([sum, len]))
# 获取根据Math分组后其他数据的描述信息
print(df.groupby(by="Math", as_index=False)["Chinese", "English"].describe())
程序执行结果:
C:\Users\009\Anaconda3\python.exe C:/Users/009/Desktop/PycharmProject/Test/Test.py
Math
50 2
65 2
78 1
80 1
Name: Math, dtype: int64
sum len
Math
50 100 2
65 130 2
78 78 1
80 80 1
Chinese ... English
count mean std min 25% ... min 25% 50% 75% max
Math ...
50 2.0 42.5 19.091883 29.0 35.75 ... 60.0 63.75 67.5 71.25 75.0
65 2.0 59.5 23.334524 43.0 51.25 ... 70.0 75.50 81.0 86.50 92.0
78 1.0 65.0 NaN 65.0 65.00 ... 80.0 80.00 80.0 80.00 80.0
80 1.0 34.0 NaN 34.0 34.00 ... 67.0 67.00 67.0 67.00 67.0
[4 rows x 16 columns]
Process finished with exit code 0
pandas读取数据Example:
eg1:读取csv数据
import pandas as pd
# 读取csv文件,encoding指定编码
df = pd.read_csv("C:\\Users\\009\\Desktop\\qingxiFile\\air_data.csv", encoding="utf-8")
# 由于数据量比较大,故设置显示的区域
print(df.iloc[1:5, 1:5])
程序执行结果:
C:\Users\009\Anaconda3\python.exe C:/Users/009/Desktop/PycharmProject/Test/Test.py
FFP_DATE FIRST_FLIGHT_DATE GENDER FFP_TIER
1 2007/02/19 2007/08/03 男 6
2 2007/02/01 2007/08/30 男 6
3 2008/08/22 2008/08/23 男 5
4 2009/04/10 2009/04/15 男 6
Process finished with exit code 0
eg2:读取excel文件
# 读取excel文件
df = pd.read_excel("C:\\Users\\009\\Desktop\\CN_lagou_jobdata.xlsx")
print(df.iloc[1:5, 0:5])
程序执行结果:
C:\Users\009\Anaconda3\python.exe C:/Users/009/Desktop/PycharmProject/Test/Test.py
_createdate title salary experience education
1 2018-3-12 10:53:24 数据分析师 12k-20k 经验不限 / 本科及以上 /
2 2018-3-12 10:53:29 数据分析 15k-30k 经验1-3年 / 本科及以上 /
3 2018-3-12 10:53:34 数据分析师 15k-25k 经验1-3年 / 本科及以上 /
4 2018-3-12 10:53:39 数据分析师 10k-20k 经验3-5年 / 本科及以上 /
Process finished with exit code 0
eg3:读取MySQL数据库数据
# 导入模块
import pandas as pd
from sqlalchemy import create_engine
# 创建数据库引擎
engine = create_engine("mysql+pymysql://root:root@localhost:3306/job?charset=utf8")
# 使用引擎读取数据库
df = pd.read_sql("select * from wordcount",engine)
print(df)
程序执行结果:
+----------+-----+
| name | num |
+----------+-----+
| 工程师 | 797 |
| 其他 | 400 |
| 销售 | 197 |
| JAVA | 113 |
| 架构师 | 105 |
| 云计算 | 98 |
| 总监 | 72 |
| 项目经理 | 50 |
| 大数据 | 45 |
| PHP | 14 |
| 客服 | 11 |
| PYTHON | 9 |
| WEB | 3 |
+----------+-----+
总结:
pandas有很多复杂的用法,有待你的深入了解,这些只是一些简单的,入门的知识。
推荐网站:
pandas中文文档:https://www.pypandas.cn/
posted @ 2019-05-15 09:41 Drawbirder 阅读( ...) 评论( ...) 编辑 收藏