ホームページ  >  記事  >  バックエンド開発  >  Python データ クリーニング: データの結合、変換、フィルタリング、並べ替え

Python データ クリーニング: データの結合、変換、フィルタリング、並べ替え

高洛峰
高洛峰オリジナル
2017-02-13 13:34:561688ブラウズ

パンダを使用していくつかの基本的な操作を実行しました。次に、データ操作について詳しく学習します。

データ クリーニングは常にデータ分析の非常に重要な部分です。

データのマージ

pandasでは、マージを通じてデータをマージできます。

import numpy as np
import pandas as pd
data1 = pd.DataFrame({'level':['a','b','c','d'],
         'numeber':[1,3,5,7]})

data2=pd.DataFrame({'level':['a','b','c','e'],
         'numeber':[2,3,6,10]})
print(data1)

結果は次のとおりです:

python 数据清洗之数据合并、转换、过滤、排序

print(data2)

結果は次のとおりです:

python 数据清洗之数据合并、转换、过滤、排序

print(pd.merge(data1,data2))

:

python 数据清洗之数据合并、转换、过滤、排序

data1 とdata2 の同じラベルに使用されているフィールドが表示され、他のフィールドは破棄されます。これは SQL の内部結合操作に相当します。
この他にも、howというキーワードで表される、outer、ringt、leftなどの接続方法があります。

data3 = pd.DataFrame({'level1':['a','b','c','d'],
         'numeber1':[1,3,5,7]})
data4=pd.DataFrame({'level2':['a','b','c','e'],
         'numeber2':[2,3,6,10]})
print(pd.merge(data3,data4,left_on='level1',right_on='level2'))

結果は次のようになります:

python 数据清洗之数据合并、转换、过滤、排序

2 つのデータ フレームの列名が異なる場合は、letf_on パラメーターと right_on パラメーターを指定してデータを結合できます

print(pd.merge(data3,data4,left_on='level1',right_on='level2',how='left'))

結果は次のようになります:

python 数据清洗之数据合并、转换、过滤、排序

その他の詳細なパラメータの説明

python 数据清洗之数据合并、转换、过滤、排序

重複するデータのマージ

この場合、マージする必要がある重複するデータに遭遇することがあります。この場合、comebine_first 関数を使用できます。

data3 = pd.DataFrame({'level':['a','b','c','d'],
         'numeber1':[1,3,5,np.nan]})
 data4=pd.DataFrame({'level':['a','b','c','e'],
         'numeber2':[2,np.nan,6,10]})
 print(data3.combine_first(data4))

結果は次のとおりです:

python 数据清洗之数据合并、转换、过滤、排序

あるデータ フレーム内の特定のデータが欠落している場合、別のデータ フレームに同じラベルのコンテンツが最初に表示されることがわかります。の要素が追加されます

ここでの使用法は np.where(isnull(a),b,a) と似ています

データの整形と軸回転

これについては前の pandas の記事で説明しました。が言及されています。データの整形には主に reshape 関数が使用され、回転には主に unstack 関数と stack 関数が使用されます。

data=pd.DataFrame(np.arange(12).reshape(3,4),
       columns=['a','b','c','d'],
       index=['wang','li','zhang'])
print(data)

結果は次のとおりです:

python 数据清洗之数据合并、转换、过滤、排序

print(data.unstack())

結果は次のとおりです:

python 数据清洗之数据合并、转换、过滤、排序

データ変換

重複する行データを削除します

data=pd.DataFrame({'a':[1,3,3,4],
       'b':[1,3,3,5]})
print(data)

結果は:

python 数据清洗之数据合并、转换、过滤、排序

print(data.duplicated())

結果は:

python 数据清洗之数据合并、转换、过滤、排序

3行目は2行目のデータを繰り返していることがわかり、表示される結果はTrue

另外用drop_duplicates方法可以去除重复行

print(data.drop_duplicates())

结果为:
python 数据清洗之数据合并、转换、过滤、排序

替换值

除了使用我们上一篇文章中提到的fillna的方法外,还可以用replace方法,而且更简单快捷

data=pd.DataFrame({'a':[1,3,3,4],
       'b':[1,3,3,5]})
print(data.replace(1,2))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

多个数据一起换

print(data.replace([1,4],np.nan))

python 数据清洗之数据合并、转换、过滤、排序

数据分段


data=[11,15,18,20,25,26,27,24]
bins=[15,20,25]
print(data)
print(pd.cut(data,bins))

结果为:
[11, 15, 18, 20, 25, 26, 27, 24][NaN, NaN, (15, 20], (15, 20], (20, 25], NaN, NaN, (20, 25]]
Categories (2, object): [(15, 20] < (20, 25]]

可以看出分段后的结果,不在分段内的数据显示为na值,其他则显示数据所在的分段。

print(pd.cut(data,bins).labels)

结果为:

[-1 -1 0 0 1 -1 -1 1]

显示所在分段排序标签

print(pd.cut(data,bins).levels)

结果为:

Index([‘(15, 20]', ‘(20, 25]'], dtype='object')

显示所以分段标签

print(value_counts(pd.cut(data,bins)))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

显示每个分段值得个数

此外还有一个qcut的函数可以对数据进行4分位切割,用法和cut类似。

排列和采样

我们知道排序的方法有好几个,比如sort,order,rank等函数都能对数据进行排序
现在要说的这个是对数据进行随机排序(permutation)

data=np.random.permutation(5)
print(data)

结果为:

[1 0 4 2 3]

这里的peemutation函数对0-4的数据进行随机排序的结果。
也可以对数据进行采样

df=pd.DataFrame(np.arange(12).reshape(4,3))
samp=np.random.permutation(3)
print(df)

结果为:

python 数据清洗之数据合并、转换、过滤、排序

print(samp)

结果为:
[1 0 2]

print(df.take(samp))

结果为:

python 数据清洗之数据合并、转换、过滤、排序

这里使用take的结果是,按照samp的顺序从df中提取样本。

更多python 数据清洗之数据合并、转换、过滤、排序相关文章请关注PHP中文网!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。