我有一个脚本,输出多列,彼此放在一起。我希望将列合并在一起并删除重复项。我尝试过合并,组合,连接和加入,但我似乎无法弄明白。我也尝试合并为一个列表,但这似乎也没有帮助。以下是我的代码:
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)
答案 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.concat
和drop_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())