将 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
如果我有这样一个以前由电子表格程序制作的 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