Python 合并数据帧将创建nan列

Python 合并数据帧将创建nan列,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试将3x2 excel(3x组数据,一组用于男性和女性)合并到一个大数据框中。每个excel可以包含不同的人员 每个数据帧当前有4列:Lidnummer,Speler,Club,Klassement 每个excel都类似于以下内容 | Lidnummer | Speler | Club | Klassement | |-----------|--------|------|------------| | 1 | some1 | meh | A | |

我正在尝试将3x2 excel(3x组数据,一组用于男性和女性)合并到一个大数据框中。每个excel可以包含不同的人员

每个数据帧当前有4列:
Lidnummer
Speler
Club
Klassement

每个excel都类似于以下内容

| Lidnummer | Speler | Club | Klassement |
|-----------|--------|------|------------|
| 1         | some1  | meh  | A          |
| 2         | some2  | meh  | D          |
| 3         | some3  | meh  | B2         |
dataFrames = [single_male, single_female, double_male, double_female, mix_male, mix_female]
players = reduce(lambda left, right: pd.merge(left, right, on=['Lidnummer','Speler', 'Club', 'gender'], how='outer'), dataFrames)
players.head()
这适用于每个性别和每个学科(
s
x
d

因此,我编写了以下代码块来读取每个数据集

single_male = pd.read_excel(xlxs, sheet_name=0)[['Lidnummer', 'Speler', 'Club', 'Klassement']].rename(index=str, columns={'Klassement': 's'}).assign(d=np.nan, x=np.nan, gender='M')
single_female = pd.read_excel(xlxs, sheet_name=1)[['Lidnummer','Speler', 'Club', 'Klassement']].rename(index=str, columns={'Klassement': 's'}).assign(d=np.nan, x=np.nan, gender='F')
double_male = pd.read_excel(xlxs, sheet_name=2)[['Lidnummer','Speler', 'Club', 'Klassement']].rename(index=str, columns={'Klassement': 'd'}).assign(s=np.nan, x=np.nan, gender='M')
double_female = pd.read_excel(xlxs, sheet_name=3)[['Lidnummer','Speler', 'Club', 'Klassement']].rename(index=str, columns={'Klassement': 'd'}).assign(s=np.nan, x=np.nan, gender='F')
mix_male = pd.read_excel(xlxs, sheet_name=4)[['Lidnummer','Speler', 'Club', 'Klassement']].rename(index=str, columns={'Klassement': 'x'}).assign(d=np.nan, s=np.nan, gender='M')
mix_female = pd.read_excel(xlxs, sheet_name=5)[['Lidnummer','Speler', 'Club', 'Klassement']].rename(index=str, columns={'Klassement': 'x'}).assign(d=np.nan, s=np.nan, gender='F')
这使数据成为我认为合并所需的数据。我把它合并如下

| Lidnummer | Speler | Club | Klassement |
|-----------|--------|------|------------|
| 1         | some1  | meh  | A          |
| 2         | some2  | meh  | D          |
| 3         | some3  | meh  | B2         |
dataFrames = [single_male, single_female, double_male, double_female, mix_male, mix_female]
players = reduce(lambda left, right: pd.merge(left, right, on=['Lidnummer','Speler', 'Club', 'gender'], how='outer'), dataFrames)
players.head()
除了创建列
s_x
s_y
d_x
d_y
x_x
x_y
,这似乎是可行的。对于每个规程(s、d和x),数据在这两列上进行拆分

一些谷歌建议在合并的
on=
部分包含例如
's'
,但是我得到了错误

您正在尝试合并object和float64列。如果您希望继续,应使用pd.concat

我试过用concat,但没法用

那么,我如何为
s
d
x
创建一个列,其中包含每个学科的数据

因此,生成的数据集如下所示:

| Lidnummer | Speler | Club | gender | s  | d   | x  |
|-----------|--------|------|--------|----|-----|----|
| 1         | some1  | meh  | M      | A  | A   | A  |
| 2         | some2  | meh  | F      | D  | C2  | C1 |
| 3         | some3  | meh  | F      | B2 | B1  | B2 |

您可以尝试以下代码(此处没有excel):


你到底想做什么?难道你不想拥有一个包含所有6张工作表的所有行的数据框吗(在完成转换之后)?这正是我想要的。我已经用一些额外的信息更新了这个问题。您在此处提供的代码是否运行,例如
重命名
(看起来有些模棱两可)?所以你想把你的床单连在一起,这很简单,是吗?我发现,在我的例子中,当每个excel都有不同数量的播放器(并非所有数据表中都存在)时,它不像您使用它的方式工作得那么好,会以列方式加入数据帧。因此,对于其中一个女性玩家框架,它会在另一个框架中搜索匹配项并为其添加列,但据我所知,这不是您想要的。你能试试下面的代码,看看它是否有效吗?我刚才在另一个评论部分提到了这一点:这是如何合并数据的?它能与单男和双男作为不同的人一起工作吗?是的,它只是把框架粘在一起。假设在“男性数据框”中有4行,在“女性数据框”中有3行,如果执行
pd.concat([male,female],axis='index')
,则会得到7条记录。这里的重要部分是
axis='index'
这将行按索引方向粘在一起。如果你这样做,
axis='columns'
它会尝试按列对齐数据。我想我遗漏了一个细节,
s
d
x
列是不同的数据集,因此我从你的代码中看到,这没有考虑到这一点。嗯,在你的帖子中,看起来你用
Nan
填充了它们。它们实际上是excel中的列吗?如果是这样,您只需将它们添加到列列表中,如有必要,将它们添加到传递给
all.rename
的dict中。对不起,我现在得走了,我12:30有一门课程。希望这能帮助你自己解决剩下的问题。熊猫很有趣。