结合大熊猫中的列

时间:2017-08-22 08:56:10

标签: python pandas

我有一个脚本,输出多列,彼此放在一起。我希望将列合并在一起并删除重复项。我尝试过合并,组合,连接和加入,但我似乎无法弄明白。我也尝试合并为一个列表,但这似乎也没有帮助。以下是我的代码:

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']

非常感谢任何帮助!

修改

有关代码的更多信息: data 是加载excelfile的地方。然后在 newlist ,显示以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)

1 个答案:

答案 0 :(得分: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

然后,您可以按照自己的方式重塑数据,例如,如果您不想要重复索引:
pd.concat([col1,col2]).drop_duplicates().reset_index(drop = True)

或者如果您希望将值设置为numpy数组而不是pandas系列:

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

请注意,在最后一种情况下,您还可以使用来自开头的numpy数组,这样会更快:

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

如果您想将它们作为列表:

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