2016-10-03 91 views
1

使用USASPENDING.gov中公開可用的csv文件。能夠從海軍提取數據,但不知道正確的語法添加第二個篩選器以排除所有記錄與Dollarsobligated = 0Python 3 Pandas按多個列值進行過濾/提取,包括<> 0

代碼是:

import pandas as pd 

df = pd.read_csv("2016_DOD_Contracts_Full_20160915.csv") 
df.columns = [c.replace(' ','_') for c in df.columns] 
new_df = df[(df.mod_agency == '1700: DEPT OF THE NAVY') & (df.dollarsobligated <> 0)] 

# Export result to CSV 
new_df.to_csv('example15.csv') 

我得到那個說<>是無效的語法錯誤。沒有網絡上的'不等於0'的例子。

+1

在Python2'<>'是相當於'!='。 [在Python3中,'<>'被刪除](https://docs.python.org/3.0/whatsnew/3.0.html#removed-syntax)。 – unutbu

+0

很高興知道,謝謝unutbu :) –

回答

2

我想你需要更換<>!=boolean indexing,因爲in Python3, <> was removed,謝謝unutbu

您也可以使用str.replace

df.columns = df.columns.str.replace(' ','_') 
new_df = df[(df.mod_agency == '1700: DEPT OF THE NAVY') & (df.Dollarsobligated != 0)] 

樣本: 「!=」

df = pd.DataFrame({'mod agency':['1700: DEPT OF THE NAVY', 
           '1700: DEPT OF THE NAVY', 
           '1800: DEPT OF THE NAVY'], 
        'Dollarsobligated':[1,0,0], 
        'C':[7,8,9]}) 

print (df) 
    C Dollarsobligated    mod agency 
0 7     1 1700: DEPT OF THE NAVY 
1 8     0 1700: DEPT OF THE NAVY 
2 9     0 1800: DEPT OF THE NAVY 

df.columns = df.columns.str.replace(' ','_') 
new_df = df[(df.mod_agency == '1700: DEPT OF THE NAVY') & (df.Dollarsobligated != 0)] 

print (new_df) 
    C Dollarsobligated    mod_agency 
0 7     1 1700: DEPT OF THE NAVY 
+0

檢查出,謝謝jezrael :) –

+0

很高興能幫助你! – jezrael

+0

如果我的回答很有幫助,請不要忘記[接受](http://meta.stackexchange.com/a/5235/295067)它。謝謝。 – jezrael

1

你必須使用的,而不是 「<>」

相關問題