day21和day22学习Pandas库

发布于:2025-04-03 ⋅ 阅读:(15) ⋅ 点赞:(0)

三、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
3.2.4删除数据
未完待续…