尝试解析字符串并在Python pandas中的数据框中创建新列

时间:2015-10-04 15:44:59

标签: python pandas

我有以下数据框。

Team Opponent  Detail
Redskins Rams  Kirk Cousins .... Penaltyon Bill Smith, Holding:10 yards 

我想要做的是使用pandas创建三列,这将给出我的名字(在这种情况下是Bill Smith),违规类型(进攻性持有),以及团队花费多少(10码)。所以它看起来像这样

Team      Opponent Detail Name       Infraction Yards
Redskins  Rams            Bill Smith  Holding   10 yards

我使用了一些字符串操作来实际提取字段,但不知道如何创建新列。我查看了一些旧列,但似乎无法让它工作。谢谢!

2 个答案:

答案 0 :(得分:0)

你的函数应返回3个值,例如......

def extract(r):
    return r[28:38], r[-8:], r[-16:-9]

首先创建空列:

df["Name"] = df["Infraction"] = df["Yards"] = ""

...然后投射"结果"列表。

df[["Name", "Infraction", "Yards"]] = list(df.Detail.apply(extract))

您可能会对this更具体但更广泛的答案感兴趣。

答案 1 :(得分:0)

要创建新列,您只需执行以下操作:

your_df['new column'] = something

例如,假设您想要一个包含列详细信息

列的第一个单词的新列
#toy dataframe
my_df = pd.DataFrame.from_dict({'Team':['Redskins'], 'Oponent':['Rams'],'Detail':['Penaltyon Bill Smith, Holding:10 yards ']})

#apply a function that retrieves the first word
my_df['new_word'] = my_df.apply(lambda x: x.Detail.split(' ')[0], axis=1)

这将创建一个包含" Penaltyon"

的列

现在,想象一下,我现在想要两个新列,一个用于第一个字,另一个用于第二个字。我可以用这两列创建一个新的数据框:

new_df =  my_df.apply(lambda x: pd.Series({'first':x.Detail.split(' ')[0],  'second': x.Detail.split(' ')[1]} ), axis=1)

现在我只需要连接两个数据帧:

pd.concat([my_df, new_df], axis=1)