2017-02-09 147 views
2

我該如何解決從哪些列匹配從Excel文件創建的數據框中的特定值的行?根據列值從熊貓數據框中提取行

以下是數據幀的幾行:

Food   Men  Women 
0 Total fruit  86.20 88.26 
1 Apples, Total 89.01 89.66 
2 Apples as fruit 89.18 90.42 
3 Apple juice  88.78 88.42 
4 Bananas   95.42 94.18 
5 Berries   84.21 81.73 
6 Grapes   88.79 88.13 

,這是我用來讀取Excel文件中的代碼,選擇我需要的列,並適當對其進行重命名:

data1= pd.read_excel('USFoodCommodity.xls', sheetname='94-98 FAH', skiprows=76,skip_footer=142, parse_cols='A, H, K') 
data1.columns = ['Food', 'Men', 'Women'] 

# Try 1: data1 = data1[data1['Food'].isin(['Total fruit']) == True] works 
# Try 2: data1 = data1[data1['Food'].isin(['Apple, Total']) == True] doesn't work 
# Try 3: data1 = data1.iloc[[1]] returns Apples, Total but not appropriate to use integer index 
# Try 4: data1[data1['Food'] == 'Berries'] doesn't work 

到目前爲止,基於this,thishere等答案,我只能返回Food =「Total fruit」的第一個索引。當我嘗試其他方法上面我只得到了列名,如:

Food Men Women 

我是新來的熊貓和看不到的地方,我錯了。爲什麼我可以提取第一行Food == Total水果,但沒有其他的東西?

回答

2

對我來說工作良好,也許問題與一些空格 - 由strip其刪除:

print (data1.Food.tolist()) 
['Total fruit', 'Apples, Total ', 'Apples as fruit', 
'Apple juice', 'Bananas', ' Berries', 'Grapes'] 

data1['Food'] = data1['Food'].str.strip() 

print (data1.Food.tolist()) 
['Total fruit', 'Apples, Total', 'Apples as fruit', 
'Apple juice', 'Bananas', 'Berries', 'Grapes'] 

data2 = data1[data1['Food'].isin(['Total fruit'])] 
print (data2) 
      Food Men Women 
0 Total fruit 86.2 88.26 

data3 = data1[data1['Food'].isin(['Apples, Total'])] 
print (data3) 
      Food Men Women 
1 Apples, Total 89.01 89.66 

data3 = data1[data1['Food'].isin(['Berries'])] 
print (data3) 
     Food Men Women 
5 Berries 84.21 81.73 
0

使用此代碼

data1= pd.read_excel('USFoodCommodity.xls', sheetname='94-98 FAH', skiprows=76,skip_footer=142, parse_cols='A, H, K') 
list_of_strings_to_match = ['Total fruit', 'Berries', 'Grape'] 
for index, row in data1.iterrows(): 
    if row['Food'] in list_of_strings_to_match: 
     print row 
+0

漿果或葡萄沒有行結果 – dreamin