pandas入门笔记

pandas入门笔记

pandas:python的数据分析库

pandas是一个开源的,BSD许可的库,为Python编程语言提供高性能,易于使用的数据结构和数据分析工具。

安装方法:

  1. 在终端中使用conda安装。(推荐使用)

    conda install pandas
    
  2. 使用pip安装

    pip install pandas
    

pandas数据结构

  1. Series(系列):一维的表现形式,一组数据,
  2. DataFrame(数据帧):二维的表现形式,可以理解为一张表
  3. 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:47  dbirder  阅读(203)  评论(0编辑  收藏  举报