pandas两种数据结构series、dataframe的CRUD

it2026-08-11  15

一、pandas

pandas数据结构主要分类

类别描述创建series类似一维数组pd.Series()dataframe类似多维数组pd.Dataframe()

series:数据列 dataframe:数据表

1、pandas的数据结构–series(数据列)

创建series

通过列表创建 series

import pandas as pd new_list = [1,2,3,4] s1 = pd.Series(new_list) s2 = pd.Series(new_list,index=list('abcd')) print(s1) print(s2)

通过数组创建series

# 通过数组创建series arr1 = np.arange(8) print(arr1) s3 = pd.Series(arr1) print(s3)

通过字典创建series

s4 = pd.Series({'name':'张','age':18,'gender':'第三性别'}) print('s4',s4) print(s4.values) print(s4.index) 注意点: 1、可以通过字典创建series对象 2、字典的键名,充当的是索引,字典的值充当的是series对象的值

series对象的相关属性

print('series对象的数据',s3.data) print('series对象的数据',s3.values) print('s1的数据',s1.values) print('series对象的索引',s3.index) print('s2对象的索引',s2.index) 注意点: 1、data返回的是一个内存对象 2、values返回的是一个创建series 的数组 3、index返回的是series对象的索引,注意,默认索引是RangeIndex

通过索引名获取数据

s4 = pd.Series({'name':'张','age':18,'gender':'第三性别'}) print(s4) print(s4.values) print(s4.index) print('获取的是姓名',s4['name']) print('获取的是姓名',s4[2])

切片

1.获取的是连续多个数据

s4 = pd.Series({'name':'张','age':18,'gender':'人妖','school':'哈佛'}) print(s4) print('$$$$$$$$获取的是性别和姓名$$$$$$$$$') print(s4[1:2]) #如果通过下标取值,那么是不能够包含结束位的 结果: gender 人妖 dtype: object print(s4['gender':'name']) #如果通过索引名的情况下,包含结束位置 结果: gender 人妖 name 张 dtype: object

2.获取不连续的多个数据

print('$$$$$$$$$$$$$$$$$$$$$$$$$$$') print(s4[['age','name']]) print(s4[[0,2]])

条件选择(与&或|非~)

ser1 = pd.Series(range(5),index=range(1,6)) print(ser1) # ser2 = ser1>=2 # print(ser2) print('#################') # print(ser1[ser2]) # print(ser1[ser1>=2]) print(ser1[(ser1<=1) | (ser1>3)]) 注意点: 1、多个条件的成立 & | ~ 2、语法结构s1[条件]

2、pandas的数据结构 --dataframe(数据表)

创建dataframe对象

通过数组创建dataframe对象

arr1 = np.arange(15).reshape((3,5)) df1 = pd.DataFrame(arr1,index=['A','B','C'],columns=list('abcde')) print(df1)

通过列表创建对象

new_list = [[1,2,3],[4,5,6]] df2 = pd.DataFrame(new_list) print(df2)

通过字典创建对象

new_dict = { 'subject':['python','java','php'], 'name':['张一毛','小张','张二毛'], 'hobby':['抽烟','蹦迪','喝酒'], 'time':pd.Timestamp('20200610') } df3 = pd.DataFrame(new_dict) print(df3) 注意点: 1、字典的键名对应的就是dataframe对象的列名 2、如果是单个数据,自动填充到最多的个数,如果是多个数据,多个数据的个数应该是相同的 3、如果是最普通的字典,键值结构,注意需要指定index new = {'name':'jk','age':18,'gender':'male'} df4=pd.DataFrame(new,index=[0]) print(df4)

指定行索引和列索引

arr1 = np.arange(15).reshape((3,5)) df1 = pd.DataFrame(arr1,index=['A','B','C'],columns=list('abcde')) print(df1) 注意点: index行索引,columns列索引

直接增加一列数据

print('*******************************') df3['school'] = '加里敦' print(df3) 注意点: 1、语法 df名['列索引'] =

取出单独的一列

print('######################') # 取出单独的一列e,取出的结果是一个series对象 print(df1['e']) print(df1['e'].values) 注意点: 1、语法df[列索引名] 2、返回的数据是一个series对象 3、获取具体的数值的语法df[列名].values ,数据的类型是数组

取出连续的多列

print(df1['a':'c']) 结果: Empty DataFrame Columns: [a, b, c, d, e] Index: [] 注意点: 1、df不支持通过列索引取连续多列这种语法结构,可以通过高级索引

取出不连续多列

print(df1[['a','b','c','e']]) 注意点: 1、df[[索引1,索引2,。。。。。]]

取出单独的一行

print('取出单独一行') print(df1['A':'A'])

取出连续多行

print('取出连读多行') print(df1['A':'B'])

取出不连续多行

print('不支持取出不连续多行的')

pandas提供的高级索引

loc 标签索引

对象.loc[,] 连续的多行、多列,起始位置:结束位置(包括结束位置的) 不连续的多行或者多列 [标签1,标签2,。。。]

iloc

对象.iloc[,] 连续的多行、多列,起始位置:结束位置(不包括结束位置的) 不连续的多行或者多列 [标签1,标签2,。。。]

增加数据、改变数据、查询数据

df1.loc['d',:]=[1,2,3,4] #行 #有d则更改原数据,无d则创建新的行 df1.loc[:,'E']=[1,2,3,4] #列 #有E则更改原数据,无E则创建新的列 df1.iloc[3] #取前三行数据,下标取值

删除数据

del

语法: del 变量名 注意修改的是原始数据。

drop

print(df1.drop(['D', 'E'], axis=1)) print(df1.drop(['d'], axis=0)) # 1、drop默认状态下,axis支持的是0代表行,1代表列,0代表行 # 2、inplace代表的是否在原始数据上做操作,没有返回值 # 3、drop这个方法默认状态下会复制一份原始数据,在复制版本上做操作,并且返回新数据
最新回复(0)