2017-09-12 10 views
1

DATAFRAMEユニークワードを保つ:はパンダのデータフレームの列に

> df 
>type(df) 
pandas.core.frame.DataFrame 

ID  Property Type        Amenities 
1952043 Apartment, Villa, Apartment     Park, Jogging Track, Park 
1918916 Bungalow, Cottage House, Cottage, Bungalow Garden, Play Ground 

をどのように私はちょうどユニーク言葉は、データフレームの行に「コンマ」で区切っておくことができますか?この場合、で "コテージハウス"と "コテージ"を同じにする必要はありません。これは、のすべての列のデータフレームで確認する必要があります。だから私の所望の出力は以下のようになります。 所望の出力を:

ID  Property Type      Amenities 
    1952043 Apartment, Villa     Park, Jogging Track 
    1918916 Bungalow, Cottage House, Cottage Garden, Play Ground 

答えて

1

まず、私はあなたが指定した文字列のために欲しいものを行う関数を作成します。次に、この関数を列のすべての文字列に適用します。

import numpy as np 
import pandas as pd 

df = pd.DataFrame([['Apartment, Villa, Apartment', 
        'Park, Jogging Track, Park'], 
        ['Bungalow, Cottage House, Cottage, Bungalow', 
        'Garden, Play Ground']], 
        columns=['Property Type', 'Amenities']) 

def drop_duplicates(row): 
    # Split string by ', ', drop duplicates and join back. 
    words = row.split(', ') 
    return ', '.join(np.unique(words).tolist()) 

# drop_duplicates is applied to all rows of df. 
df['Property Type'] = df['Property Type'].apply(drop_duplicates) 
df['Amenities'] = df['Amenities'].apply(drop_duplicates) 
print(df) 
+0

おかげで、私はこのコードから重複を削除したいですデータフレームのすべての列。私は私の質問を修正しました。あなたはそれをチェックできますか? –

+0

私は答えを編集しました。 – MLguy

0

>>> import pandas as pd 
>>> df = pd.read_csv('test.txt', sep='\t') 
>>> df['Property Type'].apply(lambda cell: set([c.strip() for c in cell.split(',')])) 
0     {Apartment, Villa} 
1 {Cottage, Bungalow, Cottage House} 
Name: Property Type, dtype: object 

主要なアイデアがあるに

  1. 反復すべての行を介してパンダのデータフレームにファイルを読み、
  2. ,
  3. によってターゲット列の文字列を分割しました
  4. リストfのユニークset()を返しますROMステップ2

コード:

>>> for row in proptype_column: # Step 1. 
...  items_in_row = row.split(', ') # Step 2. 
...  uniq_items_in_row = set(row.split(', ')) # Step 3. 
...  print(uniq_items_in_row) 
... 
set(['Apartment', 'Villa']) 
set(['Cottage', 'Bungalow', 'Cottage House']) 

今、あなたはDataFrame.apply()機能と同じことを達成することができます解決のための

>>> import pandas as pd 
>>> df = pd.read_csv('test.txt', sep='\t') 
>>> df['Property Type'].apply(lambda cell: set([c.strip() for c in cell.split(',')])) 
0     {Apartment, Villa} 
1 {Cottage, Bungalow, Cottage House} 
Name: Property Type, dtype: object 
>>> proptype_uniq = df['Property Type'].apply(lambda cell: set(cell.split(', '))) 
>>> df['Property Type (Unique)'] = proptype_uniq 
>>> df 
     ID        Property Type \ 
0 12345     Apartment, Villa, Apartment 
1 67890 Bungalow, Cottage House, Cottage, Bungalow 

        Amenities    Property Type (Unique) 
0 Park, Jogging Track, Park     {Apartment, Villa} 
1  Garden, Play Ground {Cottage, Bungalow, Cottage House} 
関連する問題