Python 熊猫组合栏
我有一个脚本,输出多个列,这些列放在彼此下面。我希望这些列合并在一起,并删除重复项。我试过合并、合并、连接和加入,但我似乎不明白。我还试图合并为一个列表,但这似乎没有帮助。下面是我的代码:Python 熊猫组合栏,python,pandas,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_exce
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']
非常感谢您的帮助
编辑
有关代码的更多信息:数据是加载Excel文件的位置。然后在newlist中,将显示以ZZZ开头的图纸名称。然后在for循环中,这些表被调用。在列中,将调用名为YYY的列。这些列放在彼此下面,但尚未合并。例如:
我希望它们是从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)
我不知道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\u 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\u duplicates().reset\u index(drop=True)
或者,如果希望将值作为numpy数组而不是熊猫系列,请执行以下操作:
pd.concat([col1,col2])。删除重复项()
请注意,在最后一种情况下,您还可以使用Beggining中的numpy
数组,这会更快:
import numpy as np
np.unique(np.concatenate((col1.values,col2.values)))
如果要将它们作为列表,请执行以下操作:
list(pd.concat([col1,col2])。drop_duplicates())
如果不向我们展示您的数据,您希望得到什么帮助?当您说“我希望将列合并在一起”时,您能举个例子吗?很难知道我们如何解决这个问题,因为还不清楚。是的,对不起,可以。我来编辑这个问题!在合并操作之前,我们需要一个数据帧示例,以及相应的所需输出。这将有助于回答问题。我已经在问题中添加了一张图片,以及代码的输出。这样有用吗?我已经试过了,但问题是我没有像col1和col2这样的两个单独的列。我有一个for循环,它将所有列放在后面,没有单独的名称,所以我不能逐个列地调用它们。所以我想我必须在for循环中对append做些什么?在for循环中,你有一个被处理的列的临时名称吗?如果是这样,您可以使用此temp
名称在for循环中使用此名称将其连接到上一个系列:my_-concat\u Series=pd.concat([my_-concat\u Series,temp])。删除重复项()。我这样做了:my_concat_series=pd.series()
x在新列表中:
sheets=pd.read\u excel(data,sheetname=x)
column=sheets.loc[:,'yyyy']
my_concat_series=pd.concat([my_concat_series,theta])。删除重复项()
,但列仍然没有合并。你知道我做错了什么吗?你能把它添加到你的问题中,然后贴出你的输出的图片,这样我们就可以将它与期望的输出进行比较了吗?这将有助于澄清问题。我编辑了这个问题!输出仍然与第一次编辑中的图片相同:(