pandsデータスクリーニングと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)多条件フィルタ
複数の条件フィルタリングは、&(および)と演算子または特定の関数を使用して行うことができます。

#   &  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]: 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を代表していますので、覚えやすいと思います。

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の要素を素早く位置決めし、列を選択する時は列名のみをサポートします。

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 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://www.jb51.net/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      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,:])
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。