将 pandas DataFrame 重新格式化为正式的 1nf

Reformat pandas DataFrame into a formal 1nf

如果我有这样一个以前由电子表格程序制作的 DataFrame

Variable Date A B C
Value1 NaN NaN NaN NaN
NaN 14.08. 21:00 1 123 3
NaN 07.08. 21:00 2 321 1
Value2 NaN NaN NaN NaN
NaN 01.08. 20:00 1 132 2

然后我需要在一段代码中将它转换为 1nf 形式的数据库,看起来像这样

Variable Date A B C
Value1 14.08. 21:00 1 123 3
Value1 07.08. 21:00 2 321 1
Value2 01.08. 20:00 1 132 2

我已经尝试在这段代码中完成这样的工作

def normalize(Series):
    x=""
    for value in Series:
        if pd.notna(value): 
            x=value
        elif pd.isnull(value):
            value=x
normalize(df['Variable'])

因此,如果单元格的值不为空,它会遍历该系列,然后它将值保存到一个变量中,以便在每次出现空值时插入它,然后取另一个值,依此类推,然后我可以做 df.dropna() 删除仅包含变量值的行作为 header 并仅保留数据

但它似乎有点问题,它要么不会更改 df['variable'] 中的任何内容,要么将其所有值更改为 None,这都不是我想要的

有人知道怎么做吗?

试试 ffill()dropna():

df["Variable"] = df["Variable"].ffill()
df = df.dropna()

>>> df
  Variable          Date    A      B    C
1   Value1  14.08. 21:00  1.0  123.0  3.0
2   Value1  07.08. 21:00  2.0  321.0  1.0
4   Value2  01.08. 20:00  1.0  132.0  2.0