2017-08-09 46 views
1

我想將xlsx文件的某些行添加到打開的列表中,但無法弄清楚如何執行此操作。 我有這樣的數據幾個XLSX文件:使用pandas將xlsx文件中的特定行添加到列表中

 A B C D E F G H 
1 A10 2  A10 2    AB 
2 A105 1  A105 2    AB 
.... 
10 A250 4  A250 4    AB 

我想要的行,其中列E減B列的單元格值的單元格值的總和不等於零添加到列表中。所以在上面的例子中,我只希望將第二行添加到列表中,因爲2 - 1是1而不是0。因此清單應當事後包含此:

​​

我不知道如何做到這一點,並嘗試了幾件事情,都與熊貓與openpyxl,但我還沒有得到它的權利呢。任何人都可以幫助我一路?

這裏是代碼的開始:

import pandas as pd 
import glob 

numbers = [] 
rapp = r"C:\Myfolder 
files = glob.glob(rapp) 
for file in files: 
    df = pd.read_excel(excelfile) 
    if df.iloc[:,4] - df.iloc[:,1] != 0: #I get an errormessage on this, and do not know how to express this properly. 
     numbers =  #I do not know what to write here either, as I somehow need it to be row.tolist() 

Traceback: 
if df.iloc[:,4] - df.iloc[:,1] != 0: 
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

謝謝您的幫助!

回答

2

熊貓在使用數組時有問題,而不是標量。

比較的輸出是:

print ((df.iloc[:, 4] - df.iloc[:, 1]) != 0) 
0 False 
1  True 
2 False 
dtype: bool 

有2個False S和一個True

不能使用if,因爲python是confused - 有TrueFalse s - 輸出是什麼?

你可以先通過boolean indexingloc比較柱EB,過濾器選擇列和輸出到列表:

m = df['E'].ne(df['B']) 
print (m) 
0 False 
1  True 
2 False 
dtype: bool 

解決方案與iloc

m = df.iloc[:, 4].ne(df.iloc[:, 1]) 
pos = [0,1,3,7] 
print (df.loc[m, df.columns[pos]].values.tolist()) 
[['A105', 1, 'A105', 'AB']] 

編輯了自己的解決方案:

m = (df.iloc[:, 4] - df.iloc[:, 1]) != 0 
pos = [0,1,3,7] 
print (df.loc[m, df.columns[pos]].values.tolist()) 
[['A105', 1, 'A105', 'AB']] 

用於多列的解決方案:

print (df) 
     A B C  D E F G H 
0 A10 2 NaN A10 2 NaN NaN AB 
1 A10 3 NaN A10 2 NaN NaN AB 
2 A105 1 NaN A105 2 NaN NaN AB 
3 A250 4 NaN A250 4 NaN NaN AB 

m = (df.iloc[:, 4] - df.iloc[:, 1]) != 0 
print (m) 
0 False 
1  True 
2  True 
3 False 
dtype: bool 

pos = [0,1,3,7] 
print (df.loc[m, df.columns[pos]].values.tolist()) 
[['A10', 3, 'A10', 'AB'], ['A105', 1, 'A105', 'AB']] 
+0

現在我對布爾索引有了更多的瞭解,非常感謝!但是這並沒有給我列表的整個行,只有列4 - 列1的總和。 – Pexe

+0

我添加了多個不等於值的解決方案 - 所以輸出是嵌套列表。可以嗎? – jezrael

+1

完美,謝謝! – Pexe

相關問題