python - Pandas 合并数据框创建 nan 列

标签 python pandas dataframe

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

每个数据帧当前包含 4 列:LidnummerSpelerClubKlassement

每个 Excel 看起来都类似于以下内容

| Lidnummer | Speler | Club | Klassement |
|-----------|--------|------|------------|
| 1         | some1  | meh  | A          |
| 2         | some2  | meh  | D          |
| 3         | some3  | meh  | B2         |

每个性别和每个学科都存在这种情况(sxd)

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

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

这将放置我认为合并所需的数据。我将其合并如下

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_xs_yd_xd_yx_xx_y。并且数据分为每个学科的这两列(s、d 和 x)。

一些谷歌搜索建议包括例如's' 在合并的 on= 部分,但随后出现错误

您正在尝试合并对象列和 float64 列。如果您想继续,您应该使用 pd.concat

我尝试过使用 concat,但无法让它工作。

那么如何为 sdx 制作一列来包含每个学科的数据?

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

| 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):

columns= ['Lidnummer', 'Speler', 'Club', 'Klassement']
single_male = pd.read_excel(xlxs, sheet_name=0)[columns]
single_male['gender']='M'

single_female = pd.read_excel(xlxs, sheet_name=1)[columns]
single_male['gender']='F'

double_male = pd.read_excel(xlxs, sheet_name=2)[columns]
single_male['gender']='M'

double_female = pd.read_excel(xlxs, sheet_name=3)[columns]
single_male['gender']='F'

mix_male = pd.read_excel(xlxs, sheet_name=4)[columns]
single_male['gender']='M'

mix_female = pd.read_excel(xlxs, sheet_name=5)[columns]
single_male['gender']='F'

all= pd.concat([single_male, single_female, double_male. double_female, mix_male, mix_female], axis='index', ignore_index=True)

all.rename({'Klassement': 's'}, axis='columns', inplace=True)
all['d']= all['s']
all['x']= all['s']

关于python - Pandas 合并数据框创建 nan 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57017633/

相关文章:

python - 使用 Python 自动执行任务

python - import pandas_datareader 给出 ImportError : cannot import name 'is_list_like'

python - 根据另一列的名称重命名 Pandas Multiindex

python - 将 pandas 数据框索引 reshape 为列

python - 如何获取新列中的所有唯一值

python - Python 中的数据框 - 匹配两个数据框之间的多列行

python - 获取xml中不同标签之间的字符串

python - 尝试使用 ExchangeLib 返回过去 24 小时内的电子邮件

python - 线性回归——降低自由度

python-3.x - 滚动窗口问题 : ValueError: Length of passed values is 3, 索引意味着 2