NumPy 处理一些多维矩阵
Scipy library 主要是积分运算,优化以及图形
Matplotlib 画图(二维图形)
IPython
Sympy 用的不多
pandas 主要是数据分析,数据处理(比较重要)数据清洗,提供比较好的数据结构
Dataframe (spark中也有)
Numpy 是一个专门用于矩阵化运算,科学计算的开源Python
强大的ndarray的多维数组结构
成熟的函数库
用于整合C/C++和Fortran代码的工具包
实用的线性代数,傅里叶变换和随机数模块
Numpy和稀疏矩阵运算包scipy配合使用非常 方便
import numpy as np
# numpy
# 安装:pip install numpy
import numpy as np
data = [
[1, 2, 3],
[4, 5, 6]
]
np_arr = np.array(data)
print(np_arr, type(np_arr))
# jupyter notebook
# 安装:pip install jupyter notebook
# 若需要登录的时候,直接将token值输入即可
# 使用:jupyter notebook
# np_arr.astype()
print(np_arr[:,1])
print(np.split(np_arr,2))
print(np_arr.reshape(3,2))
print(np_arr+np_arr)
print(np_arr-np_arr)\
print(np_arr*np_arr)
print(np_arr/np_arr)
pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数
主要用于做数据分析的
与Numpy对比:
Numpy主要是对数字进行分析,而pandas主要对数据进行处理加工,有独特的数据结构
(1)series(Series是一种类似于一维数组的对象,由数据(各种NumPy数据 类型)以及与之相关的数据标签(即索引)组成 )
(2)dataframe(二维结构的表)
# Serise
# 安装命令 pip install pandas
import pandas as pd
data = [1, 2, 3, 4, 5]
series1 = pd.Series(data)
print(series1, type(series1))
'''
输出结构:索引 结果值
0 1
1 2
2 3
3 4
4 5
'''
# 获取下标为0 的数据
print(series1[0])
data1 = {
1: "python",
2: "java",
3: "scala"
}
series2 = pd.Series(data1, index=[1, 2])
print(series2, type(series2))
'''
输出结果,下表不固定
1 python
2 java
3 scala
如果创建Series时,根据固定Key进行取值,输出结果:
series2 = pd.Series(data1, index=[1, 2])
1 python
2 java
'''
print(series2.min())
print(series2.max())
DataFrame是一个表格型的数据结构,它含有一组有序的列,每 列可以是不同的值类型(数值、字符串、布尔值等)
DataFrame既有行索引也有列索引,可以看做由Series组成的字 典
data2 = {
"Language": ["python", "java", "scala", "sql"],
"application": ["pySpark", "Hadoop", "Spark", "Hive"]
}
df1 = pd.DataFrame(data=data2)
print(df1, type(df1))
'''
输出结果:
Language application
0 python pySpark
1 java Hadoop
2 scala Spark
3 sql Hive
'''
data3 = [["java", "1"], ["python", "2"], ["scala", "3"]]
# 可以指定列名称
df2 = pd.DataFrame(data=data3, columns=["language", "year"])
print(df2, type(df2))
'''
language year
0 java 1
1 python 2
2 scala 3
'''
# 创建一列数据
data4 = [[1], [2], [3]]
df3 = pd.DataFrame(data=data4)
print(df3, type(df3))
# 删除data3中的year
# axis 默认为0 ,删除一行,改为1 删除一列
df4 = df2.drop(labels=["year"], axis=1)
print(df4)
print(df2)
df5 = df2.drop(labels=["year"], axis=1, inplace=True)
print(df2)
# 通过列进行取值,取出之后依旧是个Series
print(df1["application"], type(df1["application"]))
'''
输出结果:
0 pySpark
1 Hadoop
2 Spark
3 Hive
Name: application, dtype: object
'''
# 获取数据的第二种方式
# 通过.+列名进行获取数据
print(df1.Language, type(df1.Language))
# 如何获取一行数据
# 默认取固定下标的数据
print(df1.loc[0])
# 默认从前取5行数据
print(df1.head())
# 默认从后取5行数据
print(df1.tail())
print(">>" * 30)
data5 = {
"name": ["张老师", "王同学", "李同学"],
"age": [24, 18, 19]
}
df6 = pd.DataFrame(data=data5)
print(df6)
# 获取age大于20 的数据
print(df6[df6["age"] < 20])
# 汇总
print(df6.describe())
'''
输出结果:
age
count 3.000000
mean 20.333333
std 3.214550
min 18.000000
25% 18.500000
50% 19.000000
75% 21.500000
max 24.000000
'''
pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,常用的函数为read_csv和read_table
函数的选项可以划分为几个大类
索引:将一个或多个列当做返回的DataFrame处理,以及是否从文件、用户获取列名
类型推断和数据转换:包括用户定义值的转换、缺失值标记列表等
日期解析:包括组合功能,比如将分散在多个列中的日期时间信息组合起来
迭代:支持对大文件进行逐块迭代
不规整数据问题:跳过一些行、页脚、注释或其他一些不重要的东西
# 通过pandas读取csv文件
df7 = pd.read_csv("G:\MyPythonprojects\pythonProject\data\students.txt")
print(df7)
read_csv/read_table常用参数介绍:
path :表示文件系统位置、URL、文件型对象的字符串
sep/delimiter:用于对行中个字段进行拆分的字符序列或正则表达式
header:用做列名的行号。默认为0(第一行),若无header行,设为None
names:用于结果的列名列表,结合header=None
skiprows: 需要忽略的行数
na_values:一组用于替换NA的值
nrows:需要读取的行数(从文件开始处算起)
verbose:打印各种解析器信息,比如“非数值列中缺失值的数量”encoding:用于unicode的文本格式编码。例如,“utf-8”表示用UTF-8 编码的文本
# 导入pandas包进行创建对象
import pandas as pd
# 读取指定位置的文件数据
df = pd.read_csv("G:\MyPythonprojects\pythonProject\data\students.txt", names=["id", "name", "age", "gender", "clazz"])
# 获取前一百行
df.head(100)
# 需求统计班级下的人数
# count输出结果
df.groupby("clazz")["id"].count()