2017-08-22 208 views
-1

我有一個腳本,輸出多列,它們之間放置在一起。我希望將這些列合併在一起並刪除重複項。我試過合併,合併,連接和加入,但我似乎無法弄清楚。我也嘗試合併爲一個列表,但這似乎也沒有幫助。以下是我的代碼:在熊貓中合併列

import pandas as pd 
data = pd.ExcelFile('path') 
newlist = [x for x in data.sheet_names if x.startswith("ZZZ")] 

for x in newlist: 
    sheets = pd.read_excel(data, sheetname = x) 
    column = sheets.loc[:,'YYY'] 

任何幫助真的很感激!

編輯

關於代碼的一些更多的信息:數據就是一個excelfile被加載。然後在新列表中顯示以ZZZ開頭的工作表名稱。然後在for循環中調用這些表單。在,名爲YYY的列被調用。這些列被放置在彼此之下,但尚未合併。例如: Here is the output of the columns now我想讓他們成爲1到17的一個列表。

我希望現在更清楚!

編輯2.0

在這裏,我試圖是下面提到的concat方法。不過,我仍然得到輸出如上圖所示,而不是從1到17

my_concat_series = pd.Series() 
for x in newlist: 
    sheets = pd.read_excel(data, sheetname = x) 
    column = sheets.loc[:,'YYY'] 
    my_concat_series = pd.concat([my_concat_series,column]).drop_duplicates() 
    print(my_concat_series) 
+0

如果沒有向我們展示您的數據是什麼樣的,您希望得到什麼幫助? –

+0

當你說「我想列合併在一起」,你能舉個例子嗎?很難知道我們如何解決這個問題,因爲它很不清楚。 – ysearka

+0

是的,很抱歉,會做。我會編輯這個問題! – Cucumber12

回答

0

列表我不明白怎麼pandas.concat不工作,讓我們嘗試相應的榜樣資料圖片你發佈:

import pandas as pd 
col1 = pd.Series(np.arange(1,12)) 
0  1 
1  2 
2  3 
3  4 
4  5 
5  6 
6  7 
7  8 
8  9 
9  10 
10 11 
dtype: int64 

col2 = pd.Series(np.arange(7,18)) 
0  7 
1  8 
2  9 
3  10 
4  11 
5  12 
6  13 
7  14 
8  15 
9  16 
10 17 
dtype: int64 

然後用pd.concatdrop_duplicates

pd.concat([col1,col2]).drop_duplicates() 

0  1 
1  2 
2  3 
3  4 
4  5 
5  6 
6  7 
7  8 
8  9 
9  10 
10 11 
5  12 
6  13 
7  14 
8  15 
9  16 
10 17 
dtype: int64 

然後,您可以重塑你的數據,你想要的方式,因爲我nstance如果你不想重複的索引:
pd.concat([col1,col2]).drop_duplicates().reset_index(drop = True)

,或者如果你想要的值作爲numpy的數組,而不是熊貓系列:

pd.concat([col1,col2]).drop_duplicates()

注意,在最後一種情況下你也可以使用numpy陣列從begginning,這是更快:

import numpy as np 
np.unique(np.concatenate((col1.values,col2.values))) 

如果你希望他們作爲一個列表:

list(pd.concat([col1,col2]).drop_duplicates())

+0

我試過了,但問題是我沒有兩個單獨的列,如col1和col2。我有一個for循環,將所有列放在彼此後面,沒有單獨的名稱,所以我不能逐列地調用它們。所以我想我必須在for循環中追加一些東西,也許吧? – Cucumber12

+0

在for循環中,您是否有處理過的列的臨時名稱?如果是這樣的話,你可以在for循環中使用這個'temp'名稱將它連接到前一個系列:'my_concat_series = pd.concat([my_concat_series,temp])。drop_duplicates()'啓動時爲空系列:'my_concat_series = pd.Series()'。 – ysearka

+0

謝謝你的回答。我這樣做: 'my_concat_series = pd.Series()' '在新列表中的x:' 'sheets = pd.read_excel(data,sheetname = x)' 'column = sheets.loc [:,'YYY' ]' 'my_concat_series = pd.concat([my_concat_series,theta])。drop_duplicates()' 但是列仍然沒有合併。你看到我在做什麼錯了嗎? – Cucumber12