pandas 中有两种常用的基本结构:
- Series
        一维数组,与 Numpy 中的一维 array 类似。二者与 Python 基本的数据结构 List 也很相近。Series 能保存不同种数据类型,字符串、boolean值、数字等都能保存在 Series 中。
- DataFrame
        二维的表格型数据结构。很多功能与 R 中的 data.frame 类似。可以将 DataFrame 理解为 Series 的容器。以下的内容主要以 DataFrame 为主。

Series类型

一维可以用一维列表初始化,series的下标都是数字(可以自定义下标参数),类型是统一的

import numpy as np
import pandas as pd
#np.nan表示此处为空值
a = pd.Series([1,2,np.nan,4,5],index=['a','b','c','d','e'])
print(a)
# a    1.0
# b    2.0
# c    NaN
# d    4.0
# e    5.0

使用a.index获得索引

使用a.values获得里面的值

支持使用下标索引

import numpy as np
import pandas as pd
#np.nan表示此处为空值
a = pd.Series([1,2,3,4,5])
print(a.index)#RangeIndex(start=0, stop=5, step=1)
print(a.values)#[1 2 3 4 5]
print(a[1])#2

支持切片操作,结果会输出索引和后面的具体值

import pandas as pd
a = pd.Series([1,2,3,4,5])
print(a[1:3])
# 1    2
# 2    3
# dtype: int64

可以为索引赋值,方便后续对数据的更加直观的查看

import pandas as pd
a = pd.Series([1,2,3,4,5])
a.index = list('abcde')
print(a)
# a    1
# b    2
# c    3
# d    4
# e    5
# dtype: int64

DataFrame类型

是一个二维结构,首先构造一组时间序列,作为第一维的下标,然后创建一个DataFrame结构,如果不指定index和columns,他们的值将从0开始

import numpy as np
import pandas as pd
date = pd.date_range('20250801', periods=6)
print(date)
# DatetimeIndex(['2025-08-01', '2025-08-02', '2025-08-03', '2025-08-04',
#                '2025-08-05', '2025-08-06'],
#               dtype='datetime64[ns]', freq='D')
df = pd.DataFrame(np.random.randn(6, 4), index=date, columns=list('ABCD'))
print(df)
#                    A         B         C         D
# 2025-08-01 -0.256814  0.047517 -0.235865  1.112008
# 2025-08-02  0.471276  1.082722 -0.802634 -0.972199
# 2025-08-03  1.410286  0.280307 -0.657228 -0.907497
# 2025-08-04  1.545917  0.098314 -0.900360 -0.883484
# 2025-08-05 -0.311387 -0.835689  0.037501 -0.265389
# 2025-08-06  0.526761 -0.065319 -1.548344 -0.677999

使用字典传入数据,字典每一个key代表一列,value可以是各种能够转化成Series的对象。与Series要求所有的类型都一致不同,DataFrame只要求每一列数据的格式相同

import numpy as np
import pandas as pd
df = pd.DataFrame({'A':1.,
                   'B':'2025-08-01',
                   'C':pd.Series(1,index=list(range(4))),
                   'D':np.array([3]*4,dtype='int32'),
                   'E':pd.Categorical(["train","test","train","test"]),
                   'F':'abc'})
print(df)
#      A           B  C  D      E    F
# 0  1.0  2025-08-01  1  3  train  abc
# 1  1.0  2025-08-01  1  3   test  abc
# 2  1.0  2025-08-01  1  3  train  abc
# 3  1.0  2025-08-01  1  3   test  abc

查看数据

使用head和tail方法可以分别查看最前面几行和最后几行的数据(默认是5)

下标使用 index 属性查看,列标使用 columns 属性查看,数据值使用 values 查看

import numpy as np
import pandas as pd
df = pd.DataFrame({'A':1.,
                   'B':'2025-08-01',
                   'C':pd.Series(1,index=list(range(4))),
                   'D':np.array([3]*4,dtype='int32'),
                   'E':pd.Categorical(["train","test","train","test"]),
                   'F':'abc'})
print(df.head())
#      A           B  C  D      E    F
# 0  1.0  2025-08-01  1  3  train  abc
# 1  1.0  2025-08-01  1  3   test  abc
# 2  1.0  2025-08-01  1  3  train  abc
# 3  1.0  2025-08-01  1  3   test  abc
print(df.tail(3))
#      A           B  C  D      E    F
# 1  1.0  2025-08-01  1  3   test  abc
# 2  1.0  2025-08-01  1  3  train  abc
# 3  1.0  2025-08-01  1  3   test  abc
print(df.index)
#Index([0, 1, 2, 3], dtype='int64')
print(df.columns)
#Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
print(df.values)
# [[1.0 '2025-08-01' 1 3 'train' 'abc']
#  [1.0 '2025-08-01' 1 3 'test' 'abc']
#  [1.0 '2025-08-01' 1 3 'train' 'abc']
#  [1.0 '2025-08-01' 1 3 'test' 'abc']]

读取数据及数据操作

所用数据:

行操作

以读取excel表格为例,依然可以使用head和tail方法进行读取

使用iloc显示行内容,支持切片显示多行内容

添加新行时,需添加的数据形式需要是columns:values的列表形式,使用pd.concat()方法将需添加的数据和原始数据进行合并,pd.concat()方法的参数ignore_index=True表示合并后的 DataFrame 会生成一个新的整数索引(从 0 开始递增),避免索引冲突

使用drop()删除某一行,在括号内选择所要删除的索引

import numpy as np
import pandas as pd
df = pd.read_excel(r"C:\Users\user\Desktop\test_data.xlsx")
#使用iloc的切片用法输出内容
print(df.iloc[0:3])
#    序号   姓名  年龄 性别  班级
# 0   1  张三1  18  男  1班
# 1   2  张三2  19  男  2班
# 2   3  张三3  18  男  1班

# 新数据(转换为DataFrame,并忽略索引以避免冲突)
new_data = {"序号": "11", "姓名": "李四", "年龄": "100", "性别": "女", "班级": "3班"}
new_row = pd.DataFrame([new_data])  # 注意:数据需要是列表形式(单行)
# 使用pd.concat合并
df = pd.concat([df, new_row], ignore_index=True)
print(df[-3:])
#     序号    姓名   年龄 性别  班级
# 8    9   张三9   19  男  1班
# 9   10  张三10   18  男  1班
# 10  11    李四  100  女  3班

# 删除一行
df = df.drop([10])
print(df[-3:])
#    序号    姓名  年龄 性别  班级
# 7   8   张三8  18  男  1班
# 8   9   张三9  19  男  1班
# 9  10  张三10  18  男  1班

列操作

查看列时可以直接使用.columns查看列的表头信息,还可以使用类似字典的方式查看某一列或某几列的全部信息,查看某几列时需要用列表格式查看

增加一列使用类似字典增加数据的方式直接增加

删除一列使用drop(),但在里面需要设置axis参数,等于0时表示对行操作,等于1表示对列操作

通过标签选择数据使用df.loc[[index].[column]]方法

import numpy as np
import pandas as pd
df = pd.read_excel(r"C:\Users\user\Desktop\test_data.xlsx")
# 查看列
print(df.columns)
# Index(['序号', '姓名', '年龄', '性别', '班级'], dtype='object')
print(df["姓名"][:3])
# 0    张三1
# 1    张三2
# 2    张三3
# Name: 姓名, dtype: object
print(df[["姓名","班级"]][:3])
#     姓名  班级
# 0  张三1  1班
# 1  张三2  2班
# 2  张三3  1班
df["成绩"] = 100
print(df[:3])
#    序号   姓名  年龄 性别  班级   成绩
# 0   1  张三1  18  男  1班  100
# 1   2  张三2  19  男  2班  100
# 2   3  张三3  18  男  1班  100
df = df.drop("成绩", axis=1)
print(df[:3])
#    序号   姓名  年龄 性别  班级
# 0   1  张三1  18  男  1班
# 1   2  张三2  19  男  2班
# 2   3  张三3  18  男  1班
data = df.loc[1,"姓名"]
print(data)#张三2
data = df.loc[[1,2,3],["姓名","年龄","班级"]]
print(data)
#     姓名  年龄  班级
# 1  张三2  19  2班
# 2  张三3  18  1班
# 3  张三4  29  3班

条件选择

使用不同条件筛选所需要的所有数据,并且df["年龄”]可以写成df.年龄,书写更加方便

import numpy as np
import pandas as pd
df = pd.read_excel(r"C:\Users\user\Desktop\test_data.xlsx")
data = df[(df.年龄==18)& (df.班级=='1班')]
print(data)
#    序号    姓名  年龄 性别  班级
# 0   1   张三1  18  男  1班
# 2   3   张三3  18  男  1班
# 7   8   张三8  18  男  1班
# 9  10  张三10  18  男  1班

缺失值及异常值处理

isnull()方法返回布尔值对象,判断哪些值是缺失值,False为不缺,True为缺失

fillna()方法用来填充缺失值

df.dropna()用来删除缺失值,可以使用参数axis=0来选择行或列

import numpy as np
import pandas as pd
df = pd.read_excel(r"C:\Users\user\Desktop\test_data.xlsx")
#输出有缺失值的一行内容
data = df[df["年龄"].isnull()]
print(data)
#填充缺失的内容
#将要填充的内容直接给空位
df["年龄"] = df["年龄"].fillna(18)
print(df)

数据保存

使用df.to_excel("文件路径")方法进行保存即可

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐