我有这种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
如何更改"名称"的年龄值?列到新列,其名称为"年龄"?
答案 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()))))
天真时间测试
答案 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]