pandas数据筛选和csv操作的实现方法
1.数据筛选
abc 0024 16810 2121416 3182022 4242628 5303234 6363840 7424446 8485052 9545658
(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函数
当每列已有columnname时,用df[‘a']就能选取出一整列数据。如果你知道columnnames和index,且两者都很好输入,可以选择.loc同时进行行列选择。
In[28]:df.loc[0,'c'] Out[28]:4 In[29]:df.loc[1:4,['a','c']] Out[29]: ac 1610 21216 31822 42428 In[30]:df.loc[[1,3,5],['a','c']] Out[30]: ac 1610 31822 53034
c.iloc函数
如果columnname太长,输入不方便,或者index是一列时间序列,更不好输入,那就可以选择.iloc了,该方法接受列名的index,iloc使得我们可以对column使用slice(切片)的方法对数据进行选取。这边的i我觉得代表index,比较好记点。
In[35]:df.iloc[0,2] Out[35]:4 In[34]:df.iloc[1:4,[0,2]] Out[34]: ac 1610 21216 31822 In[36]:df.iloc[[1,3,5],[0,2]] Out[36]: ac 1610 31822 53034 In[38]:df.iloc[[1,3,5],0:2] Out[38]: ab 168 31820 53032
d.ix函数
ix的功能更加强大,参数既可以是索引,也可以是名称,相当于,loc和iloc的合体。需要注意的是在使用的时候需要统一,在行选择时同时出现索引和名称,同样在同行选择时同时出现索引和名称。
df.ix[1:3,['a','b']] Out[41]: ab 168 21214 31820 In[42]:df.ix[[1,3,5],['a','b']] Out[42]: ab 168 31820 53032 In[45]:df.ix[[1,3,5],[0,2]] Out[45]: ac 1610 31822 53034
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文件内容
SupplierName,InvoiceNumber,PartNumber,Cost,PurchaseDate SupplierX,001-1001,2341,$500.00,1/20/14 SupplierX,001-1001,2341,$500.00,1/20/14 SupplierX,001-1001,5467,$750.00,1/20/14 SupplierX,001-1001,5467,$750.00,1/20/14 SupplierY,50-9501,7009,$250.00,1/30/14 SupplierY,50-9501,7009,$250.00,1/30/14 SupplierY,50-9505,6650,$125.00,2002/3/14 SupplierY,50-9505,6650,$125.00,2002/3/14 SupplierZ,920-4803,3321,$615.00,2002/3/14 SupplierZ,920-4804,3321,$615.00,2002/10/14 SupplierZ,920-4805,3321,$615.00,2/17/14 SupplierZ,920-4806,3321,$615.00,2/24/14
(1)csv文件读写
关于read_csv函数中的参数说明参考博客:https://www.nhooo.com/article/164445.htm
importpandasaspd #读写csv文件 df=pd.read_csv("supplier_data.csv") df.to_csv("supplier_data_write.csv",index=None)
(2)筛选特定的行
#SupplierNmae列中姓名包含'Z',或者Cost列中的值大于600 print(df[df["SupplierName"].str.contains('Z')]) print(df[df['Cost'].str.strip('$').astype(float)>600]) print(df.loc[(df["SupplierName"].str.contains('Z'))|(df['Cost'].str.strip('$').astype(float)>600.0),:]) #行中的值属于某个集合 li=[2341,6650] print(df[df['PartNumber'].isin(li)]) print(df.loc[df['PartNumber'].astype(int).isin(li),:]) #行中的值匹配某个模式 print(df[df['InvoiceNumber'].str.startswith("001-")])
(3)选取特定的列
#选取特定的列 #列索引值,打印1,3列 print(df.iloc[:,1:4:2]) #列标题打印 print(df.loc[:,["InvoiceNumber","PartNumber"]]) #选取连续的行 print(df.loc[1:4,:])
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。