2017-08-28 12 views
0

我儘量讓新拉布勒TOR包含在以前的專欄文章在數據集中的每個行基於文本,我的繼承人代碼爲什麼在熊貓數據框中elif else,str.contains和.any()的組合會給我一致的結果?

import pandas as pd 
import numpy as np 
data = pd.read_excel('C:\\Users\\data july 2017.xlsx') 
#data['Description'].fillna('') 
pawoon = data[data['Description'].str.contains('Pawoon')] 
pawoon['time'] = "0" 
if pawoon.Description.str.contains('1 Bulan').any(): 
    pawoon['time'] = 1 
elif pawoon.Description.str.contains('3 Bulan').any(): 
    pawoon['time'] = 3 
elif pawoon.Description.str.contains('6 bulan').any(): 
    pawoon['time'] = 6 
elif pawoon.Description.str.contains('1 Tahun').any(): 
    pawoon['time'] = 1 
else: 
    pawoon['time'] = 0 

這裏的,我已經得到了部分結果,當我打印的部分結果上述

Pawoon POS Software (1 Bulan) 1 
Software Pawoon (6 bulan)  1 
Pawoon POS Software (1 Tahun) 1 
Pawoon POS Software (3 Bulan) 1 
Pawoon POS Software (1 Bulan) 1 

,我期待下面顯示的結果代碼(根據if ELIF else語句,我在我的代碼提)

Pawoon POS Software (1 Bulan) 1 
Software Pawoon (6 bulan)  6 
Pawoon POS Software (1 Tahun) 12 
Pawoon POS Software (3 Bulan) 3 
Pawoon POS Software (1 Bulan) 1 

爲什麼會發生?如何獲得我想要的結果? 我猜.any()應該是變化的,但如果我改變.all每個結果一致0

回答

1

如果如果else語句可以使用numpy.select需要多方面的:

m1 = pawoon.Description.str.contains('1 Bulan') 
m2 = pawoon.Description.str.contains('3 Bulan') 
m3 = pawoon.Description.str.contains('6 Bulan') 
m4 = pawoon.Description.str.contains('1 Tahun') 

pawoon['time'] = np.select([m1,m2,m3,m4], [1,3,6,12], default=0) 
print (pawoon) 
        Description time 
0 Pawoon POS Software (1 Bulan)  1 
1  Software Pawoon (6 Bulan)  6 
2 Pawoon POS Software (1 Tahun) 12 
3 Pawoon POS Software (3 Bulan)  3 
4 Pawoon POS Software (1 Bulan)  1 
+2

不知道'numpy.select' – piRSquared

1

試着這麼做


#Practice data frame 
df = pd.DataFrame({'description':list('abc')}) 

#Initialize the column 
df['time'] = -1 

#Just one example of how to do this 
df.loc[df.description.str.contains('a'),'time'] = 10 

結果是

description time 
a   10 
b   -1 
c   -1 

您的問題是你通過做df['time'] = 1來改變整個列。 loc是實現這一目標的更好方法。

+0

謝謝,這樣的作品,即使沒有別的,如果我 –

相關問題