我正在尝试将 3x2 excels(3x 组数据,一组用于男性和女性)合并到一个大数据框中。每个excel可以包含不同的人。
每个数据框当前存在 4 列:Lidnummer
, Speler
, Club
, Klassement
。
每个 excel 如下所示
| Lidnummer | Speler | Club | Klassement |
|-----------|--------|------|------------|
| 1 | some1 | meh | A |
| 2 | some2 | meh | D |
| 3 | some3 | meh | B2 |
这适用于每个性别和每个学科 ( 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')
这将放置我认为合并所需的数据。我将其合并如下
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)的 2 列。
一些谷歌搜索建议包括's'
在on=
合并的部分,但后来我得到了错误
You are trying to merge on object and float64 columns. If you wish to proceed you should use 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):
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']
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句