pandas数据筛选和csv操作的实现方法
技术  /  管理员 发布于 7年前   242
1. 数据筛选
a b c0 0 2 41 6 8 102 12 14 163 18 20 224 24 26 285 30 32 346 36 38 407 42 44 468 48 50 529 54 56 58
(1)单条件筛选
df[df['a']>30]# 如果想筛选a列的取值大于30的记录,但是之显示满足条件的b,c列的值可以这么写df[['b','c']][df['a']>30]# 使用isin函数根据特定值筛选记录。筛选a值等于30或者54的记录df[df.a.isin([30, 54])]
(2)多条件筛选
可以使用&(并)与| (或)操作符或者特定的函数实现多条件筛选
# 使用&筛选a列的取值大于30,b列的取值大于40的记录df[(df['a'] > 30) & (df['b'] > 40)]
(3)索引筛选
a. 切片操作
df[行索引,列索引]或df[[列名1,列名2]]
#使用切片操作选择特定的行df[1:4]#传入列名选择特定的列df[['a','c']]
b. loc函数
当每列已有column name时,用 df [ ‘a' ] 就能选取出一整列数据。如果你知道column names 和index,且两者都很好输入,可以选择 .loc同时进行行列选择。
In [28]: df.loc[0,'c']Out[28]: 4In [29]: df.loc[1:4,['a','c']]Out[29]: a c1 6 102 12 163 18 224 24 28In [30]: df.loc[[1,3,5],['a','c']]Out[30]: a c1 6 103 18 225 30 34
c. iloc函数
如果column name太长,输入不方便,或者index是一列时间序列,更不好输入,那就可以选择 .iloc了,该方法接受列名的index,iloc 使得我们可以对column使用slice(切片)的方法对数据进行选取。这边的 i 我觉得代表index,比较好记点。
In [35]: df.iloc[0,2]Out[35]: 4In [34]: df.iloc[1:4,[0,2]]Out[34]: a c1 6 102 12 163 18 22In [36]: df.iloc[[1,3,5],[0,2]]Out[36]: a c1 6 103 18 225 30 34In [38]: df.iloc[[1,3,5],0:2]Out[38]: a b1 6 83 18 205 30 32
d. ix函数
ix的功能更加强大,参数既可以是索引,也可以是名称,相当于,loc和iloc的合体。需要注意的是在使用的时候需要统一,在行选择时同时出现索引和名称, 同样在同行选择时同时出现索引和名称。
df.ix[1:3,['a','b']]Out[41]: a b1 6 82 12 143 18 20In [42]: df.ix[[1,3,5],['a','b']]Out[42]: a b1 6 83 18 205 30 32In [45]: df.ix[[1,3,5],[0,2]]Out[45]: a c1 6 103 18 225 30 34
e. at函数
根据指定行index及列label,快速定位DataFrame的元素,选择列时仅支持列名。
In [46]: df.at[3,'a']Out[46]: 18
f. iat函数
与at的功能相同,只使用索引参数
In [49]: df.iat[3,0]Out[49]: 18
2. csv操作
csv文件内容
Supplier Name,Invoice Number,Part Number,Cost,Purchase DateSupplier X,001-1001,2341,$500.00 ,1/20/14Supplier X,001-1001,2341,$500.00 ,1/20/14Supplier X,001-1001,5467,$750.00 ,1/20/14Supplier X,001-1001,5467,$750.00 ,1/20/14Supplier Y,50-9501,7009,$250.00 ,1/30/14Supplier Y,50-9501,7009,$250.00 ,1/30/14Supplier Y,50-9505,6650,$125.00 ,2002/3/14Supplier Y,50-9505,6650,$125.00 ,2002/3/14Supplier Z,920-4803,3321,$615.00 ,2002/3/14Supplier Z,920-4804,3321,$615.00 ,2002/10/14Supplier Z,920-4805,3321,$615.00 ,2/17/14Supplier Z,920-4806,3321,$615.00 ,2/24/14
(1)csv文件读写
关于read_csv函数中的参数说明参考博客:https:///article/164445.htm
import pandas as pd# 读写csv文件df = pd.read_csv("supplier_data.csv")df.to_csv("supplier_data_write.csv",index=None)
(2)筛选特定的行
#Supplier Nmae列中姓名包含'Z',或者Cost列中的值大于600print(df[df["Supplier Name"].str.contains('Z')])print(df[df['Cost'].str.strip('$').astype(float) > 600])print(df.loc[(df["Supplier Name"].str.contains('Z'))|(df['Cost'].str.strip('$').astype(float) > 600.0),:])#行中的值属于某个集合li = [2341,6650]print(df[df['Part Number'].isin(li)])print(df.loc[df['Part Number'].astype(int).isin(li),:])#行中的值匹配某个模式print(df[df['Invoice Number'].str.startswith("001-")])
(3)选取特定的列
#选取特定的列#列索引值,打印1,3列print(df.iloc[:,1:4:2])#列标题打印print(df.loc[:,["Invoice Number", "Part Number"]])#选取连续的行print(df.loc[1:4,:])
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号