python之pandas數據篩選和csv操做

  本博主要總結DaraFrame數據篩選方法(loc,iloc,ix,at,iat),並以操做csv文件爲例進行說明函數

1. 數據篩選

    a   b   c
0   0   2   4
1   6   8  10
2  12  14  16
3  18  20  22
4  24  26  28
5  30  32  34
6  36  38  40
7  42  44  46
8  48  50  52
9  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)多條件篩選

  能夠使用&(並)與| (或)操做符或者特定的函數實現多條件篩選spa

# 使用&篩選a列的取值大於30,b列的取值大於40的記錄
df[(df['a'] > 30) & (df['b'] > 40)]

(3)索引篩選

a. 切片操做

  df[行索引,列索引]或df[[列名1,列名2]].net

#使用切片操做選擇特定的行
df[1:4]
#傳入列名選擇特定的列
df[['a','c']]

b. loc函數

  當每列已有column name時,用 df [ ‘a’ ] 就能選取出一整列數據。若是你知道column names 和index,且二者都很好輸入,能夠選擇 .loc同時進行行列選擇。code

In [28]: df.loc[0,'c']
Out[28]: 4

In [29]: df.loc[1:4,['a','c']]
Out[29]:
    a   c
1   6  10
2  12  16
3  18  22
4  24  28

In [30]: df.loc[[1,3,5],['a','c']]
Out[30]:
    a   c
1   6  10
3  18  22
5  30  34

c. iloc函數

  若是column name太長,輸入不方便,或者index是一列時間序列,更很差輸入,那就能夠選擇 .iloc了,該方法接受列名的index,iloc 使得咱們能夠對column使用slice(切片)的方法對數據進行選取。這邊的 i 我以爲表明index,比較好記點。blog

In [35]: df.iloc[0,2]
Out[35]: 4

In [34]: df.iloc[1:4,[0,2]]
Out[34]:
    a   c
1   6  10
2  12  16
3  18  22

In [36]: df.iloc[[1,3,5],[0,2]]
Out[36]:
    a   c
1   6  10
3  18  22
5  30  34

In [38]: df.iloc[[1,3,5],0:2]
Out[38]:
    a   b
1   6   8
3  18  20
5  30  32

d. ix函數

  ix的功能更增強大,參數既能夠是索引,也能夠是名稱,至關於,loc和iloc的合體。須要注意的是在使用的時候須要統一,在行選擇時同時出現索引和名稱, 一樣在同行選擇時同時出現索引和名稱。索引

df.ix[1:3,['a','b']]
Out[41]:
    a   b
1   6   8
2  12  14
3  18  20

In [42]: df.ix[[1,3,5],['a','b']]
Out[42]:
    a   b
1   6   8
3  18  20
5  30  32

In [45]: df.ix[[1,3,5],[0,2]]
Out[45]:
    a   c
1   6  10
3  18  22
5  30  34

e. at函數

  根據指定行index及列label,快速定位DataFrame的元素,選擇列時僅支持列名。ip

In [46]: df.at[3,'a']
Out[46]: 18

f. iat函數

  與at的功能相同,只使用索引參數get

In [49]: df.iat[3,0]
Out[49]: 18

2. csv操做

  csv文件內容

Supplier Name,Invoice Number,Part Number,Cost,Purchase Date
Supplier X,001-1001,2341,$500.00 ,1/20/14
Supplier X,001-1001,2341,$500.00 ,1/20/14
Supplier X,001-1001,5467,$750.00 ,1/20/14
Supplier X,001-1001,5467,$750.00 ,1/20/14
Supplier Y,50-9501,7009,$250.00 ,1/30/14
Supplier Y,50-9501,7009,$250.00 ,1/30/14
Supplier Y,50-9505,6650,$125.00 ,2002/3/14
Supplier Y,50-9505,6650,$125.00 ,2002/3/14
Supplier Z,920-4803,3321,$615.00 ,2002/3/14
Supplier Z,920-4804,3321,$615.00 ,2002/10/14
Supplier Z,920-4805,3321,$615.00 ,2/17/14
Supplier Z,920-4806,3321,$615.00 ,2/24/14

(1)csv文件讀寫

  關於read_csv函數中的參數說明參考博客:https://blog.csdn.net/liuweiyuxiang/article/details/78471036博客

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列中的值大於600
print(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,:])
相關文章
相關標籤/搜索