将行添加到尚不存在的DataFrame列

时间:2017-11-24 00:13:34

标签: python pandas

我想在DataFrame的特定列中拆分我拥有的字符串,从两个新系列中获取数字,并将值分配给四个新列。

在进行任何修改之前,Saison的“得分”栏目如下所示:

0    \n3:2 (1:1) \n
1    \n0:2 (0:2) \n
2    \n1:1 (1:0) \n
3    \n1:1 (1:1) \n
4    \n2:0 (2:0) \n

我想要的输出是:

  Tore_Heim Tore_Auswärts Tore_Heim_HZ Tore_Auswärts_HZ
0         3             2            1                1
1         0             2            0                2
2         1             1            1                0
3         1             1            1                1
4         2             0            2                0

我找到了一个使用列表理解的解决方案:

scores["Tore_Heim"] = pd.DataFrame([re.findall("\d+", scores[0][i]) for i in range(len(scores))]).loc[:, 0]
scores["Tore_Auswärts"] = pd.DataFrame([re.findall("\d+", scores[0][i]) for i in range(len(scores))]).loc[:, 1]
scores["Tore_Heim_HZ"] = pd.DataFrame([re.findall("\d+", scores[1][i]) for i in range(len(scores))]).loc[:, 0]
scores["Tore_Auswärts_HZ"] = pd.DataFrame([re.findall("\d+", scores[1][i]) for i in range(len(scores))]).loc[:, 1]

第二个问题是第2行和第3行是否可以组合成一个。

1 个答案:

答案 0 :(得分:1)

您可以使用str.extractall + unstack

df
              Col
0  \n3:2 (1:1) \n
1  \n0:2 (0:2) \n
2  \n1:1 (1:0) \n
3  \n1:1 (1:1) \n
4  \n2:0 (2:0) \n

v = df.Col.str.extractall('(\d+)', flags=re.M).unstack()
v.columns = ['Tore_Heim', 'Tore_Auswärts', 'Tore_Heim_HZ', 'Tore_Auswärts_HZ']
v

  Tore_Heim Tore_Auswärts Tore_Heim_HZ Tore_Auswärts_HZ
0         3             2            1                1
1         0             2            0                2
2         1             1            1                0
3         1             1            1                1
4         2             0            2                0

要转换为数字类型,请在列之间应用pd.to_numeric -

v = v.apply(pd.to_numeric, errors='coerce')

或者,执行astype转化 -

v = v.astype(float) # .astype(int) will work if you don't have NaNs in your data