将记录中的值移动一列。

时间:2018-12-08 10:06:22

标签: python pandas dataframe data-cleaning

我有一个数据框,其中一个观察值的列不匹配。像这样:

  Names    Age   Dept
0  John     21  sales
1   Joe     22     IT
2   Ann     20     IT
3    24  sales    NaN

我想将值移到下一列,并在第一列上实际缺少值的NaN赋值。

   Names  Age   Dept
0  John   21  sales
1   Joe   22     IT
2   Ann   20     IT
3   NaN   24  sales

我进行了很多搜索,但没有找到执行此操作的方法。我觉得应该有一个内置的方法来以一种简单的方式做到这一点。

我是编程的新手,很抱歉,这是一个基本问题。

2 个答案:

答案 0 :(得分:1)

通过to_numeric使用notna或函数isnumeric创建布尔掩码,以查找有问题的行,然后shift仅过滤行:

m = pd.to_numeric(df['Names'], errors='coerce').notna()
#alternative
#m = df['Names'].str.isnumeric()

df[m] = df[m].shift(axis=1)
print (df)
  Names Age   Dept
0  John  21  sales
1   Joe  22     IT
2   Ann  20     IT
3   NaN  24  sales

答案 1 :(得分:1)

或使用df[...]=df[...]结构:

df[df['Dept'].isnull()]=df[df['Dept'].isnull()].shift(axis=1)

现在:

print(df)

是:

  Names Age   Dept
0  John  21  sales
1   Joe  22     IT
2   Ann  20     IT
3   NaN  24  sales

shift(axis=1)正在逐行移动,如果删除axis=1部分,shift()将会逐列移动。