通过查找 NaN 将 pandas 数据帧拆分为多个数据帧
Split pandas dataframe into multiple dataframes by looking for NaN
我正在尝试将一个数据帧从 excel 拆分为多个数据帧。
数据框如下所示:
Name
Value
Unit
0
AA
10
mm
1
BDC
20
mm
2
NaN
NaN
NaN
3
AFD
60
mm
4
AKW
18
cm
5
TDF
0,5
mm
6
NaN
NaN
NaN
7
AA
10
mm
8
FB
65
l
我已经在 python 中正确存储了整个数据帧,但是我不知道如何在存在 NaN 行时将数据帧拆分为多个数据帧。我试图遍历 .iterrows() 但它只给我行,直到第一个 NaN 行。将行合并到新数据框中的最佳做法是什么?感谢任何帮助。
content = pd.read_excel(filepath, sheet_name='Parameter'))
right_tables = content[['Name', 'Value', 'Unit']]
for i, row in right_tables.head().iterrows():
print(row)
控制台输出:
Name AA
Value 10
Unit mm
Name: 0, dtype: object
Name BDC
Value 20
Unit mm
Name: 1, dtype: object
Name NaN
Value NaN
Unit NaN
Name: 2, dtype: object
我需要的结果应该是这样的:
| |名称 |价值 |单位 |
|--|--|--|--|
|0|AA|10|毫米|
|1|下死点|20|毫米|
Name
Value
Unit
0
AFD
60
mm
1
AKW
18
cm
2
TDF
0,5
mm
Name
Value
Unit
0
AA
10
mm
1
FB
65
l
删除缺失的行 DataFrame.dropna
and groupby by Series created by Series.isna
with Series.cumsum
:
for g, df in df.dropna().groupby(df['Name'].isna().cumsum()):
print (df.reset_index(drop=True))
Name Value Unit
0 AA 10 mm
1 BDC 20 mm
Name Value Unit
0 AFD 60 mm
1 AKW 18 cm
2 TDF 0,5 mm
Name Value Unit
0 AA 10 mm
1 FB 65 l
如果需要DataFrame列表:
dfs= [df.reset_index(drop=True) for g,df in df.dropna().groupby(df['Name'].isna().cumsum())]
print (dfs)
[ Name Value Unit
0 AA 10 mm
1 BDC 20 mm, Name Value Unit
0 AFD 60 mm
1 AKW 18 cm
2 TDF 0,5 mm, Name Value Unit
0 AA 10 mm
1 FB 65 l]
我正在尝试将一个数据帧从 excel 拆分为多个数据帧。
数据框如下所示:
Name | Value | Unit | |
---|---|---|---|
0 | AA | 10 | mm |
1 | BDC | 20 | mm |
2 | NaN | NaN | NaN |
3 | AFD | 60 | mm |
4 | AKW | 18 | cm |
5 | TDF | 0,5 | mm |
6 | NaN | NaN | NaN |
7 | AA | 10 | mm |
8 | FB | 65 | l |
我已经在 python 中正确存储了整个数据帧,但是我不知道如何在存在 NaN 行时将数据帧拆分为多个数据帧。我试图遍历 .iterrows() 但它只给我行,直到第一个 NaN 行。将行合并到新数据框中的最佳做法是什么?感谢任何帮助。
content = pd.read_excel(filepath, sheet_name='Parameter'))
right_tables = content[['Name', 'Value', 'Unit']]
for i, row in right_tables.head().iterrows():
print(row)
控制台输出:
Name AA
Value 10
Unit mm
Name: 0, dtype: object
Name BDC
Value 20
Unit mm
Name: 1, dtype: object
Name NaN
Value NaN
Unit NaN
Name: 2, dtype: object
我需要的结果应该是这样的: | |名称 |价值 |单位 | |--|--|--|--| |0|AA|10|毫米| |1|下死点|20|毫米|
Name | Value | Unit | |
---|---|---|---|
0 | AFD | 60 | mm |
1 | AKW | 18 | cm |
2 | TDF | 0,5 | mm |
Name | Value | Unit | |
---|---|---|---|
0 | AA | 10 | mm |
1 | FB | 65 | l |
删除缺失的行 DataFrame.dropna
and groupby by Series created by Series.isna
with Series.cumsum
:
for g, df in df.dropna().groupby(df['Name'].isna().cumsum()):
print (df.reset_index(drop=True))
Name Value Unit
0 AA 10 mm
1 BDC 20 mm
Name Value Unit
0 AFD 60 mm
1 AKW 18 cm
2 TDF 0,5 mm
Name Value Unit
0 AA 10 mm
1 FB 65 l
如果需要DataFrame列表:
dfs= [df.reset_index(drop=True) for g,df in df.dropna().groupby(df['Name'].isna().cumsum())]
print (dfs)
[ Name Value Unit
0 AA 10 mm
1 BDC 20 mm, Name Value Unit
0 AFD 60 mm
1 AKW 18 cm
2 TDF 0,5 mm, Name Value Unit
0 AA 10 mm
1 FB 65 l]