如何通过在单个单元格中删除NaN来调整数据帧的大小?

时间:2018-09-27 12:29:53

标签: python python-3.x pandas nan

我有一个如下所示的df:

column1   column2    column3   column4
1            2       nan          4
1            2        3           nan
1            2       nan          nan
1            2       nan          nan

我如何重塑数据框,对于每个带有NaN的单元格,将其删除,并且如果该列具有相同的值,则只取其一个实例?

新df应该看起来像这样;

column1   column2    column3   column4
1            2        3          4

我大约有500列这样的不合格数据。

编辑:

我使用这一行代码将包含斑点数据的值移到一行。

df = df.apply(lambda x: pd.Series(x.dropna().values))

新df如下所示:

column1   column2    column3   column4
1            2        3            4
1            2       nan          nan
1            2       nan          nan
1            2       nan          nan

然后我放下重复项:

df = df.drop_duplicates()

df现在看起来像这样:

 column1   column2    column3   column4
    1            2        3            4
    1            2       nan          nan

不知道为什么Nan在这个点之后没有下降,而行却在下降:

pivoted_df = pivoted_df.dropna()

1 个答案:

答案 0 :(得分:3)

您可以通过ffill转发填充缺少的值,删除NaN的行并删除重复项:

df = df.ffill().dropna().drop_duplicates()
print (df)
   column1  column2  column3  column4
1        1        2      3.0      4.0

或者如果需要某些列指定的每个组的第一个非缺失值:

df = df.groupby(['column1','column2'], as_index=False).first()
print (df)

   column1  column2  column3  column4
0        1        2      3.0      4.0