文章目录
三、Pandas库
1、概述
- Pandas 的出现使得 Python 做数据分析的能力得到了大幅度提升,它主要实现了数据分析的五个重要环节:加载数据、整理数据、操作数据、构建数据模型、分析数据
2、安装
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple/
3、内置的数据结构
3.1 Series(一维数据结构)
- Series 是带标签的一维数组,这里的标签可以理解为索引,但这个索引并不局限于整数,它也可以是字符类型,比如 a、b、c 等
3.1.1创建的语法
pandas.Series( data, index , dtype , copy)
参数:
- data:一维数组
- index:数据的索引,默认是0~n
- dtype:数据类型,默认自动识别
- copy:是否允许复制,默认False
示例:
import pandas as pd arr = pd.Series([1, 2, 3], ['a', 'b', 'c']) print(arr)
输出
a 1 b 2 c 3 dtype: int64
3.1.2 访问数据
- 标签切片取值,包含边界值
- 示例:
import pandas as pd
arr = pd.Series([1, 2, 3], ['a', 'b', 'c'])
print(arr['a']) # 输出 1
print(arr['a':'b'])
# 输出
a 1
b 2
dtype: int64
3.1.3 遍历
语法1:for idx in s.index:
- 获取Series数组的元素标签(索引)
- 示例:
import pandas as pd s = pd.Series([1, 2, 3], ['a', 'b', 'c']) for idx in s.index: print(idx) # 输出 a b c (三行)
语法2:for v in s.values
- 获取Series数组的所有元素(取值)
- 示例:
import pandas as pd s = pd.Series([1, 2, 3], ['a', 'b', 'c']) for v in s.values: print(v) # 输出 1 2 3 (三行)
语法3:for idx, val in s.items():
- 获取Series数组的所有元素和对应标签
- 示例:
import pandas as pd s = pd.Series([1, 2, 3], ['a', 'b', 'c']) for idx, val in s.items(): print(idx, val) # 输出 a 1 b 2 c 3
3.2 DataFrame(二维数据结构)
- DataFrame 是一种表格型数据结构,它既有行标签,又有列标签
3.2.1创建语法
函数名 | 参数 |
---|---|
pd.DataFrame( data, index, columns, dtype, copy) | data:一组数据(ndarray、series, map, lists, dict 等类型) index:索引值,或者可以称为行标签 columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) dtype:数据类型 copy:默认为 False,表示复制数据 data |
字典嵌套数组,多个数组长度要一致
示例1:
import pandas as pd # 创建 DataFrame 对象 data = {"name":['小米','小红','小紫'],"age":[18,19,20]} s = pd.DataFrame(data=data) print(s) # 输出 name age 0 小米 18 1 小红 19 2 小紫 20
使用Series数组创建DataFrame数组,多个Series长度可以不同,最后取并值,缺值的位置补NaN。
示例:
import pandas as pd data = { "name":pd.Series(['zs','ls','ww'],['a','b','c']), "age":pd.Series(['10'],['a']) } s = pd.DataFrame(data=data) print(s) # 输出 name age a zs 10 b ls NaN c ww NaN
3.2.2取值和赋值
- 只能一列一列的切片操作(垂直砍),不能水平砍切片
import pandas as pd
data = {
"name":pd.Series(['zs','ls','ww'],['a','b','c']),
"age":pd.Series(['10'],['a'])
}
s = pd.DataFrame(data=data) # 数据和上面的一样
# 输出列切片age======================
print(s['age'])
#输出
a 10
b NaN
c NaN
Name: age, dtype: object
# 添加一列======================
s['three'] = np.Series(["新列"],['a'])
print(s)
# 输出
name age three
a zs 10 新列
b ls NaN NaN
c ww NaN NaN
- s.assign()方法添加新列
import pandas as pd
data = {
"name":pd.Series(['zs','ls','ww'],['a','b','c']),
"age":pd.Series(['10'],['a'])
}
s = pd.DataFrame(data=data) # 数据和上面的一样
# =============插入新列======================
# 注意:这里列表长度要和Dataframe的行数一致,否则报错
s = s.assign(three = [1,2,3])
print(s)
# 输出
name age three
a zs 10 1
b ls NaN 2
c ww NaN 3
- s.insert()在指定位置插入新列
- 参数:
- loc: 插入位置的列索引。
- column: 新列的名称。
- value: 要插入的 Series(数据)。
import pandas as pd
data = {
"name":pd.Series(['zs','ls','ww'],['a','b','c']),
"age":pd.Series(['10'],['a'])
}
s = pd.DataFrame(data=data) # 数据和上面的一样
# =============指定位置插入新列======================
# 使用 insert 方法在位置 1 插入新列 'D'
s.insert(1, 'D', [13, 14, 15])
print(result)
# 输出
name D age
a zs 13 10
b ls 14 NaN
c ww 15 NaN
3.2.3修改数据和列名
- 修改数据:
import pandas as pd
data = {
"name":pd.Series(['zs','ls','ww'],['a','b','c']),
"age":pd.Series([10],['a'])
}
s = pd.DataFrame(data=data) # 数据和上面的一样
#==============修改age列 +10 ==============
s["age"] = s["age"] + 10
print(s)
# 输出 ---- NaN 参与任何数学运算的结果依旧是 NaN
name age
a zs 20.0
b ls NaN
c ww NaN
- 修改列名字
- 修改原数组名字:s. columns = [newname]
- 返回新数组:s.rename( columns={ “旧名”:“新名” ,…} )
- 示例:
import pandas as pd
data = {
"name":pd.Series(['zs','ls','ww'],['a','b','c']),
"age":pd.Series(['10'],['a'])
}
s = pd.DataFrame(data=data) # 数据和上面的一样
#=====s. columns = [newname] 直接修改原数组 ========
s.columns = ["A","B"]
print(s)
# 输出 -- 列 name和age 修改成 A和B
A B
a zs 10
b ls NaN
c ww NaN
#== s.rename(columns={"旧名":"新名",....}) 生产新数组========
s2 = s.rename( columns={"A":"Z","B","x"} )
print(s2)
# 输出
Z x
a zs 10
b ls NaN
c ww NaN