2017-08-22 56 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