NumPy和Pandas都是Python的第三方库,但是它们的应用场景不同。NumPy主要用于处理数值数据,提供了ndarray数组来容纳数据,支持并行计算,底层使用C语言编写,效率高。Pandas主要用于处理类表格数据,提供了Series和DataFrame数据结构,能够处理不同类型的数据,支持数字索引和标签索引,是专门为处理表格和混杂数据设计的。NumPy适合处理统一的数组数据,而Pandas更适合处理结构化数据。总之,Numpy与Pandas库是数据分析的两大利器。
一、Python常见数据类型
Number(数字)String(字符串)bool(布尔类型)List(列表)Tuple(元组)Set(集合)Dictionary(字典)
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
此外还有一些高级的数据类型,如: 字节数组类型(bytes)。
1. Number(数字)
数字类型包括:int(整型)
float(浮点)
bool(布尔)
complex(复数)
内置的 type() 函数以及 isinstance()函数可以用来查询变量所指的对象类型,两者的区别为:
type()不会认为子类是一种父类类型。isinstance()会认为子类是一种父类类型。
注意:
Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加, True==1、False==0 会返回 True,但可以通过 is 来判断类型。
1、Python可以同时为多个变量赋值,如a, b = 1, 2。2、一个变量可以通过赋值指向不同类型的对象。3、数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。4、在混合计算时,Python会把整型转换成为浮点数。
2. String(字符串)
Python字符串是用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。
字符串的截取的语法格式如下:
变量[头下标:尾下标]
索引值以 0 为开始值,-1 为从末尾的开始位置。左闭右开
索引截取:str[ 1 ] 、 str[ 1:1 ]
加号连接:str + 'A'
星号复制:str * 2
反斜杠转义:不想转义可以在字符串前面添加一个 r
>>> print('xia\nb')
xia
b
>>> print(r'xia\nb')
xia\nb
注意:
1、反斜杠可以用来转义,使用r可以让反斜杠不发生转义。2、字符串可以用+运算符连接在一起,用*运算符重复。3、Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。4、Python中的字符串不能改变。
3. bool(布尔类型)
布尔类型即 True 或 False。在 Python 中,True 和 False 都是关键字,表示布尔值。常用于控制程序的流程,如判断某个条件是否成立等。
注意:
布尔类型只有两个值:True 和 False。 布尔类型可以和其他数据类型进行比较,比如数字、字符串等。在比较时,Python 会将 True 视为 1,False 视为 0。 布尔类型可以和逻辑运算符一起使用,包括 and、or 和 not。这些运算符可以用来组合多个布尔表达式,生成一个新的布尔值。 布尔类型也可以被转换成其他数据类型,比如整数、浮点数和字符串。在转换时,True 会被转换成 1,False 会被转换成 0。 在 Python 中,所有非零的数字和非空的字符串、列表、元组等数据类型都被视为 True,只有 0、空字符串、空列表、空元组等被视为 False。因此,在进行布尔类型转换时,需要注意数据类型的真假性。
4. List(列表)
List(列表) 是 Python 中使用最频繁的数据类型。列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。列表是写在方括号 [ ] 之间、用逗号分隔开的元素列表,如[ 1, 2, 3]等。和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
列表截取:索引值以 0 为开始值,-1 为从末尾的开始位置
索引截取:list[ 1 ] 、 list[ 1:1 ] 、list[ 1: 6: 2] (其中第三个数字表示步长,为2)
加号连接:list1 + list2
星号复制:list * 2
注意:
1、List写在方括号之间,元素用逗号隔开。2、和字符串一样,list可以被索引和切片。3、List可以使用+操作符进行拼接。4、List中的元素是可以改变的。5、List内置了有很多方法,例如 append()、pop() 等等。
5. Tuple(元组)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。元组中的元素类型也可以不相同。元组与字符串、列表类似,可以被索引且下标索引从0开始,-1 为从末尾开始的位置。也可以进行截取(如列表,不再赘述)。
注意:
1、与字符串一样,元组的元素不能修改,字符串可看作一种特殊的元组。2、元组也像字符串、列表一样可以被索引和切片,方法一样。3、注意构造包含 0 或 1 个元素的元组的特殊语法规则: tup1 = () # 空元组; tup2 = (20,) # 一个元素,需要在元素后添加逗号。4、虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表,([1,2,3], 'xgf')。5、元组也可以使用+操作符进行拼接。6、string、list 和 tuple 都属于 sequence(序列)
6. Set(集合)
集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素,即元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。集合使用大括号 { } 表示,元素之间用逗号 , 分隔。另外,也可以使用 set() 函数创建集合,但空集合必须用set()函数来创建,{ }是用来创建一个空字典。
#集合创建
>>>a = set('abcxxgcf')
{'a','b','c','x','g','f'}
>>>b = {'x','g','f'}
{'x','g','f'}
>>>c = set()
{}
7. Dictionary(字典)
字典(dictionary)是Python中另一个非常有用的内置数据类型。列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键值对来存取的,而不是通过偏移存取。字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。其中键(key)必须使用不可变类型,也就是说List(列表)做不了键(key)。在同一个字典中,键(key)必须是唯一的,值(value)可相同。另外,字典类型也有一些内置的函数,例如 clear()、keys()、values() 等。
>>>dict= {'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}
>>>dict.keys()
dict_keys(['name', 'code', 'site'])
>>>dict.values()
dict_values(['runoob', 1, 'www.runoob.com'])
注意:
1、字典是一种映射类型,它的元素是键值对。2、字典的关键字必须为不可变类型,且不能重复。3、创建空字典使用 { }4、字典类型也有一些内置的函数,例如 clear()、keys()、values() 等,dict.keys()、dict.values()。
二、创建Numpy ndarray
Numpy是Python家族中数值计算、科学计算的基础,是很多使用工具包实现的基础。Numpy提供向量与矩阵运算有助于优化量化分析算法性能。NumPy主要用于处理数值数据,提供了ndarray数组来容纳数据,支持并行计算,底层使用C语言编写,效率高。NumPy适合处理统一的数组数据,而Pandas更适合处理结构化数据。Numpy最重要的一个特点是N维数组对象 - ndarray维数在Numpy中成为秩(rank),如:
一维数组,rank = 1二维数组,rank = 2
在Python中,每一个线性的数组称为一个轴(axes),rank就是描述轴的数量。
创建ndarray有两种方式:
使用普通的array列表使用Numpy的内置函数
1. 使用array创建数组
注:ndarray中所有的元素必须是相同类型,最好不要有非数字的字符串。
数组的属性:
shape:获取数组大小的元组 (行,列),如果是一维数组,则只显示(行,)dtype:获取元素数据类型的对象size: 获取元素数量
2. 使用Numpy的内置函数创建数组
(1) arange 或 linspace创建连续数组。
(2) zeros,ones, full 方法创建数组
(3) eye方法创建单位矩阵。
注: 单位矩阵:方形矩阵,且对角线的值均为1,其他位置的值为0。
(4) diag创建对角矩阵
(5) random创建随机数组
numpy.random函数简介:
seed: 确定随机数生成的种子
permutation:返回一个序列的随机排列或返回一个随机排列的范围
shuffle: 对一个序列就地随机排序
rand: 产生均匀分布的样本值
randint: 从给定的上下限范围内随机选取整数
randn: 产生正太分布(平均值为0,标准差为1)的样本值
binomial: 产生二项分布的样本值
normal:产生正态(高斯)分布的样本值
beta: 产生Beta分布的样本值
关于Python常见random随机函数详解 请见:Python常用random随机函数详解汇总
(6) reshape创建多维数组
三、创建Pandas Series
Pandas主要用于处理类表格数据,提供了Series和DataFrame数据结构,能够处理不同类型的数据,支持数字索引和标签索引,是专门为处理表格和混杂数据设计的。
创建Series有三种方式:
通过列表创建通过数组创建通过字典创建
1. 通过列表创建
import pandas as pd
import numpy as np
# 定义一个列表
List = [1,2,3,4]
S = pd.Series(List)
S
第一列为索引,是Series在创建时默认生成的,第二列为值,通过type(S)命令即可看到S的数据类型为:pandas.core.series.Series,我们也可以自定义索引:
S=pd.Series(List,index=['a','b','c','d'])
S
重新设置我们的索引,这样原先的索引就从0,1,2,3变为了a,b,c,d。
查看索引和值可以分别通过访问Series的index属性和values属性:
2. 通过数组创建
这里的数组指的是numpy中的数组,它是对python列表的深度封装。
#定义数组
arr=np.arange(1,5)
S = pd.Series(arr)
S
3. 通过字典创建
关于Series,它更像一个有序的大字典,键值对就相当于索引和值,因此我们用操作字典的习惯操作Series往往能得心应手。我们来看如何通过字典创建一个Series:
# 创建一个字典
dic = {"name": "xgf",
"age": 25,
"grade": [100, 90, 80]}
S = pd.Series(dic)
S
这里我们已经成功创建了一个存放学生信息的Series,由于字典自带key,因此索引也就自然创建了。如果我们希望age放在第一列,应该怎么设置呢?通过设置索引:
S = pd.Series(dic, index=["age", "name", "grade"])
S
此时,index参数的功能不再是设置索引,而是根据索引排序,因为字典本身自带索引。
给S新增一个索引sex:
S = pd.Series(dic, index=["age", "name", "grade",'sex'])
S
可以看到,因为这位同学的性别未知,创建的Series中,sex这一栏就只能填NaN了,跟字典的操作一样,通过赋值,即可确定性别:
S['sex']='男'
S
像操作字典一样,我们往Series里插入一条索引与数据(键值对):
S['hobby']=['basketball,game,sing']
S
四、创建Pandas DataFrame
创建DataFrame有三种方式:
创建空的数据框架手工创建通过列表(list)创建通过字典(dict)创建通过读取.xlsx/.csv等文件创建
1. 创建空的数据框架
pd.DataFrame(columns=['A', 'B', 'C'], index=[0,1,2])
columns参数用来定义列名,index参数用来定义行号。上面的代码创建了一个3行3列的二维数据表:
2. 手工创建Pandas DataFrame
定义数据data、索引index、列名columns:
df = pd.DataFrame(data=['Apple','Banana','Cherry','Dates','Eggfruit'],
index = [1,2,3,4,5],
columns=['Fruits'])
往DataFrame里添加一列Quantity来表示水果数量:
df = pd.DataFrame(data=[['Apple',5],
['Banana',10],
['Cherry',8],
['Dates',3],
['Eggfruit',7]],
columns = ['Fruits','Quantity'],
index=[1,2,3,4,5])
注意:data参数和colums参数都进行了相应的调整。
3. 通过列表(list)创建
一维、二维列表创建df1、df2:
#一维列表列表:
fruits_list1 = ['Apple','Banana','Cherry','Dates','Eggfruit']
#二维列表列表:
fruits_list2 = [['Apple',5],
['Banana',10],
['Cherry',8],
['Dates',3],
['Eggfruit',7]]
df1 = pd.DataFrame(fruits_list1,
columns = ['Fruits'],
index = ['a','b','c','d','e'])
df2 = pd.DataFrame(fruits_list2,
columns=['Fruits','Quantity'],
index = ['f','g','h','i','j']
dtype=float) #整型转浮点型
4. 通过字典(dict)创建
字典就是一组键/值对,键对应成为DataFrame的列字段,而所有的值对应数据。 记住这个对应关系。
dict = {key1 : value1, key2 : value2, key3 : value3}
当我们将上述字典对象转换为DataFrame:
dict={'key1':'value1',
'key2':'value2',
'key3':'value3'
}
df = pd.DataFrame(dict,index=[0])
df
注意:
df = pd.DataFrame(dict,index=[0]) ,直接传入标称属性为value的字典需要设置index,否则则会报错。具体可参考 ValueError: If using all scalar values, you must pass an index
需求:创建如下的DataFrame:
由于列名为Fruits、Quantity和Color,因此对应的字典的键也就是这三个,而每一列的值则对应字典中的键值:
fruits_dict = { 'Fruits':['Apple','Banana','Cherry','Dates'],
'Quantity': [5, 10, 8, 3],
'Color': ['Red', 'Yellow', 'Red', 'Brown']}
df = pd.DataFrame(fruits_dict)
df
再例如用Series生成的字典创建:
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
# index 与序列长度相投
# key代表列的表头,pd.Series 作为 value 作为该列的元素
df = pd.DataFrame(d)
df
5. 通过读取.xlsx/.csv等文件创建
#读取.xlsx
fruits = pd.read_excel('fruits.xlsx')
#读取.csv
fruits = pd.read_csv('fruits.csv')
相关阅读
发表评论