在pandas数据帧中分隔行值

时间:2017-03-18 01:13:28

标签: python pandas dataframe jupyter-notebook

我有这种pandas数据帧输出,列位于顶行:

Gender,Name
Male, Matt 57
Male, Jack 42
Male, David 31
Male, John 28
Male, Tim 51

我的目标是获得这种输出:

Gender,Name, Age
Male, Matt, 57
Male, Jack, 42
Male, David, 31
Male, John, 28
Male, Tim, 51

如何更改"名称"的年龄值?列到新列,其名称为"年龄"?

2 个答案:

答案 0 :(得分:1)

df.drop('Name', 1).join(
    df.Name.str.split().apply(pd.Series, index=['Name', 'Age']))

  Gender   Name Age
0   Male   Matt  57
1   Male   Jack  42
2   Male  David  31
3   Male   John  28
4   Male    Tim  51

这也让你得到同样的东西

df.drop('Name', 1).join(
    df.Name.str.extract('(?P<Name>\S+)\s+(?P<Age>\S+)', expand=True))

或奇怪方向的一步

df.assign(
    **dict(zip(
        ('Name', 'Age'),
        zip(*np.core.defchararray.split(df.Name.values.astype(str), ' ').tolist()))))

天真时间测试

enter image description here

答案 1 :(得分:1)

split_values = df['Name'].str.split(' ', expand=True)
df['Name'] = split_values.iloc[:, 0]
df['Age'] = split_values.iloc[:, 1]
print(df)

  Gender   Name Age
0   Male   Matt  57
1   Male   Jack  42
2   Male  David  31
3   Male   John  28
4   Male    Tim  51

甚至DRYer:

split_values = df['Name'].str.split(' ', expand=True)
for ii, col_name in enumerate(['Name', 'Age']):
    df[col_name] = split_values.iloc[:, ii]