2016-10-24 5 views
1

が含まれている場合、私はデータフレームパンダ:それはサブ

member_id,device_type,device_id,event_type,event_path,event_duration 
603609,url,mail.ru/,0,pc,7d4a095373874b4fb26a2e6d070b6ad3 
603609,url,mail.ru/,0,pc,7d4a095373874b4fb26a2e6d070b6ad3 
603609,url,mail.ru/,0,pc,7d4a095373874b4fb26a2e6d070b6ad3 
603609,url,mail.ru/,3,pc,7d4a095373874b4fb26a2e6d070b6ad3 
603609,url,mail.ru/community.livejournal.com/psp_ru,28,pc,7d4a095373874b4fb26a2e6d070b6ad3 
603609,url,lady.mail.ru/article/491411-kurban-omarov-otvetil-na-obvinenija-ksenii-borodinoj/?from=mr_news,0,pc,7d4a095373874b4fb26a2e6d070b6ad3 
603609,url,mail.ru/,0,pc,7d4a095373874b4fb26a2e6d070b6ad3 
603609,url,lady.mail.ru/article/491411-kurban-omarov-otvetil-na-obvinenija-ksenii-borodinoj/?from=mr_news,0,pc,7d4a095373874b4fb26a2e6d070b6ad3 
603609,url,lady.mail.ru/article/491411-kurban-omarov-otvetil-na-obvinenija-ksenii-borodinoj/?from=mr_news,0,pc,7d4a095373874b4fb26a2e6d070b6ad3 

を持っていると私は別のファイルから部分を見つけると、それはpattrnが含まれている場合、find.xlsx

url category category2 
falloutsite.ru/ Рубрики/Hi-Tech/Программы/Софт/Игры/ Рубрики/Hi-Tech/Программы/Софт/Игры/ 
kmzpub.ru/games.asp Рубрики/Hi-Tech/Программы/Софт/Игры/Универсальное/ Рубрики/Hi-Tech/Программы/Софт/Игры/Универсальное/ 
sigma-team.ru/content/view/15/19 Рубрики/Hi-Tech/Программы/Софт/Игры/Quake и Counter-Strike/  Рубрики/Hi-Tech/Программы/Софт/Игры/Quake и Counter-Strike/ 
community.livejournal.com/psp_ru Рубрики/Развлечения/Игры/Приставочные игры/  Рубрики/Развлечения/Игры/Приставочные игры/ 
から列 categoryを作成する必要があります列にいくつかの値を置き換えます

私はそれを置き換えるために

df = pd.read_csv('car owners games_category.csv') 
find = pd.read_excel('blue.xlsx') 
d = find.set_index('url')['category'].to_dict() 
df['category'] = df.device_id.apply(lambda x: pd.Series([v for k,v in d.items() if k in x])) 

を使用カテゴリを返しますが、ValueError: Wrong number of items passed 2, placement implies 1を返します。 mapisinを使用しようとしましたが、共通の文字列が必要です。

+0

データを作成するのに時間を置いてください。[clipbo友好的な](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)? – Ivan

答えて

1

実際のデータで長時間のテストを行った結果、13ではなく、リスト内包復帰2カテゴリの問題Seriesがあります。

つとりうる溶液はSeriesからリターンのみ最初の項目のためiloc[0]を使用することである:別の解決策はdropすることによって、この行を削除ある

df['category'] = df.device_id 
        .apply(lambda x: pd.Series([v for k,v in d.items() if k in x]).iloc[0]) 

find.drop(13, inplace=True) 

試験全問題の行:

#custom function return list to column 'category' 
def f(x): 
    return [v for k,v in d.items() if k in x] 
df['category'] = df.device_id.apply(f) 
print (df) 

#filter all rows where length of list is not 1 
print (df[df.category.apply(len) != 1]) 

#return length of problematic rows 
print (df.ix[df.category.apply(len) != 1, 'category'].apply(len)) 
関連する問題