pandas 数据切片方法
pandas 数据切片方法
pandas 数据切片方法 :[],loc,iloc,at,iat,ix
基础数据
import pandas as pd import random random.seed(0) rnd_1 = [random.randrange(1,20) for x in range(10)] rnd_2 = [random.randrange(1,20) for x in range(10)] rnd_3 = [random.randrange(1,20) for x in range(10)] fecha = pd.date_range('2012-4-10', '2012-4-19') data = pd.DataFrame({'fecha':fecha, 'rnd_1': rnd_1, 'rnd_2': rnd_2, 'rnd_3': rnd_3}) print(data) print(data.describe())
结果:
fecha rnd_1 rnd_2 rnd_3 0 2012-04-10 13 19 10 1 2012-04-11 14 7 4 2 2012-04-12 2 17 3 3 2012-04-13 9 5 11 4 2012-04-14 17 10 16 5 2012-04-15 16 5 18 6 2012-04-16 13 4 4 7 2012-04-17 10 9 12 8 2012-04-18 16 18 14 9 2012-04-19 12 5 11 rnd_1 rnd_2 rnd_3 count 10.000000 10.000000 10.000000 mean 12.200000 9.900000 10.300000 std 4.417138 5.915141 5.186521 min 2.000000 4.000000 3.000000 25% 10.500000 5.000000 5.500000 50% 13.000000 8.000000 11.000000 75% 15.500000 15.250000 13.500000 max 17.000000 19.000000 18.000000
[]切片方法
按照索引实现行选择或列选择或区块选择
print(data[1:5]) # 行选择 fecha rnd_1 rnd_2 rnd_3 1 2012-04-11 14 7 4 2 2012-04-12 2 17 3 3 2012-04-13 9 5 11 4 2012-04-14 17 10 16 print(data[['rnd_1', 'rnd_2']]) # 列选择 rnd_1 rnd_2 0 13 19 1 14 7 2 2 17 3 9 5 4 17 10 5 16 5 6 13 4 7 10 9 8 16 18 9 12 5 # 区块选择, 对于多列选择,不能像行选择时一样使用1:5这样的方法来选择 print(data[:5][['rnd_1', 'rnd_2']]) rnd_1 rnd_2 0 13 19 1 14 7 2 2 17 3 9 5 4 17 10
loc
loc可以按照索引来进行行列选择,包含结尾
# 按照索引行选择, loc与第一种方法不同之处在于会把第5行也选择进去,而第一种方法只会选择到第4行为止。 print(data.loc[1:5]) fecha rnd_1 rnd_2 rnd_3 1 2012-04-11 14 7 4 2 2012-04-12 2 17 3 3 2012-04-13 9 5 11 4 2012-04-14 17 10 16 5 2012-04-15 16 5 18 # 区块选择 print(data.loc[2:4, ['rnd_2', 'fecha']]) rnd_2 fecha 2 17 2012-04-12 3 5 2012-04-13 4 10 2012-04-14
loc能够选择在两个特定日期之间的数据,这两个日期必须都要在索引中
# 将行索引设定为日期 data_fecha = data.set_index('fecha') print(data_fecha.head()) rnd_1 rnd_2 rnd_3 fecha 2012-04-10 13 19 10 2012-04-11 14 7 4 2012-04-12 2 17 3 2012-04-13 9 5 11 2012-04-14 17 10 16 # 生成两个特定日期 from pandas import datetime fecha_1 = datetime(2012, 4, 14) fecha_2 = datetime(2012, 4, 18) # 生成切片数据 print(data_fecha.loc[fecha_1: fecha_2]) rnd_1 rnd_2 rnd_3 fecha 2012-04-14 17 10 16 2012-04-15 16 5 18 2012-04-16 13 4 4 2012-04-17 10 9 12 2012-04-18 16 18 14
如果没有特殊需求,强烈建议使用loc而尽量少使用[],因为loc在对DataFrame进行重新赋值操作时会避免chained indexing问题,使用[]时编译器很可能会给出SettingWithCopy的警告。
iloc
loc是按照索引(index)的值来选取,iloc是按照索引的位置来进行选取。iloc不关心索引的具体值是多少,只关心位置是多少,所以使用iloc时方括号中只能使用数值。
# 行选择 print(data_fecha.iloc[1: 5, :]) rnd_1 rnd_2 rnd_3 fecha 2012-04-11 14 7 4 2012-04-12 2 17 3 2012-04-13 9 5 11 2012-04-14 17 10 16 # 列选择 print(data_fecha.iloc[:,[1,2]].head()) rnd_2 rnd_3 fecha 2012-04-10 19 10 2012-04-11 7 4 2012-04-12 17 3 2012-04-13 5 11 2012-04-14 10 16 # 切片选择 print( data_fecha.iloc[[1,3,6],[0,2]]) rnd_1 rnd_3 fecha 2012-04-11 14 4 2012-04-13 9 11 2012-04-16 13 4
at
at的使用方法与loc类似,但是比loc有更快的访问数据的速度,只能访问单个元素,不能访问多个元素。
iat
iat对于iloc的关系就像at对于loc的关系,是一种更快的基于索引位置的选择方法,同at一样只能访问单个元素。
ix
以上几种方法都要求查询的秩在索引中,或者位置不超过长度范围,而ix允许你得到不在DataFrame索引中的数据。
选取或者删除某列含有特殊数值的行
import pandas as pd import numpy as np a=np.array([[1,2,3],[4,5,6],[7,8,9]]) df1=pd.DataFrame(a,index=['row0','row1','row2'],columns=list('ABC')) print(df1) df2=df1.copy() #选取某列含有特定数值的行 # 选取df1中A列包含数字1的行 df1=df1[df1['A'].isin([1])] #通过~取反,选取不包含数字1的行 df2=df2[~df2['A'].isin([1])] print(df1) print(df2)
结果:
A B C row0 1 2 3 row1 4 5 6 row2 7 8 9 A B C row0 1 2 3 A B C row1 4 5 6 row2 7 8 9
选取或者删除某行含有特殊值的列
import pandas as pd import numpy as np a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) df2 = pd.DataFrame(a, index=['row0', 'row1', 'row2'], columns=list('ABC')) print(df2) #选取某行含有特定数值的列 cols=[x for i,x in enumerate(df2.columns) if df2.iat[0,i]==3] #利用enumerate对row0进行遍历,将含有数字3的列放入cols中 print(cols) #df2=df2[cols] 选取含有特定数值的列 df2=df2.drop(cols,axis=1) #利用drop方法将含有特定数值的列删除 print(df2)
结果:
A B C row0 1 2 3 row1 4 5 6 row2 7 8 9 ['C'] A B row0 1 2 row1 4 5 row2 7 8
pandas 读csv
pd.read_csv(res_csv_path, encoding="utf-8-sig", sep=",", quotechar="'")
参考:
https://www.cnblogs.com/traditional/p/12514914.html
https://cloud.tencent.com/developer/article/1856554
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2021-08-25 应用程序分段: 数据段、代码段、BSS段以及堆和栈
2021-08-25 hexdump, hexedit 使用指南
2021-08-25 Python调用Shell命令 (python, shell 混合编程)