pandsデータスクリーニングとcsv操作の実現方法
1.データフィルタ
複数の条件フィルタリングは、&(および)と演算子または特定の関数を使用して行うことができます。
a.スライス操作
df[行索引、列索引]またはdf[[列名1、列名2]]
各列に既にcolumn nameがある場合、df[‘a’]を使って一列のデータを選択して取り出すことができます。column namesとindexを知っているなら、両方とも入力しやすいです。locは同時に列の選択ができます。
もしcolumn nameが長すぎて、入力が不便だったり、indexが一列の時系列で、もっと入力しにくいなら、選択できます。iloc、この方法は列名のindexを受け入れます。ilocはcolumnにsliceを使う方法でデータを選択することができます。こちらのiはindexを代表していますので、覚えやすいと思います。
ixの機能はより強く、パラメータはインデックスでもいいし、名前でもいいです。locとilocの合体に相当します。注意したいのは、使う時に統一が必要で、行を選択する時にインデックスと名前が同時に現れます。同じ行を選択する時にインデックスと名前が同時に現れます。
指定された行indexおよび列labelに従って、DataFrameの要素を素早く位置決めし、列を選択する時は列名のみをサポートします。
atの機能と同じで、インデックスパラメータのみを使用します。
csvファイルの内容
read_についてcsv関数のパラメータ説明参照ブログ:https://www.jb51.net/article/164445.htm
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,:])
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。