我正在尝试使用 python 循环遍历 Excel 电子表格中的行,如果相关列有多个换行符或回车符,则将一行中的数据分成多行。
在下面的示例数据集中,我将使用第 3 列来确定是否需要扩展行。显示的“当前数据集”是 Excel 中的一行,其中第 3 - 8 列在单元格内有多行。这只是我的电子表格上需要扩展的一行多行,有些可能没有需要拆分的多个换行符或回车符。第 1 列和第 2 列始终为一行,需要添加到新行中。数据中可能存在空白点,这些空白点只是需要在目标数据集中考虑的空换行符回车符。第 3 - 8 列将具有相同数量的行,这些行将代表新行。
我尝试使用 pandas 爆炸功能,但我留下了一些行的荒谬数量的副本。一次尝试,将大约 50 行变成 1,500 行。
Current data set
Col 1 Col 2 Col 3 Col 4 Col 5 Col 6 Col 7 Col 8
Num 1 Num 2 "Num 3 "Text 1 "Num 7 "Text 5 "Num 11 "Text 9
Num 4 Text 2 Num 8 Text 6 Text 10
Num 5 Text 3 Num 9 Text 7 Num 12
Num 6" Text 4" Num 10" Text 8" Num 13" Text 11"
Goal data set
Col 1 Col 2 Col 3 Col 4 Col 5 Col 6 Col 7 Col 8
Num 1 Num 2 Num 3 Text 1 Num 7 Text 5 Num 11 Text 9
Num 1 Num 2 Num 4 Text 2 Num 8 Text 6 Text 10
Num 1 Num 2 Num 5 Text 3 Num 9 Text 7 Num 12
Num 1 Num 2 Num 6 Text 4 Num 10 Text 8 Num 13 Text 11
data = pd.read_excel(f'Output\\spreadSheet.xlsx')
columns = data.columns.tolist()
for column in columns:
if column == "Col 3":
continue
for idx, status in enumerate(data[column]):
try:
if '\n' in status:
data[column] = data[column].str.split('\n \n')
data = data.explode(column)
except:
continue
data.to_excel(f'Output\\spreadSheet.xlsx')
我创建了简单的示例来重现:
df = pd.DataFrame( [[1, 2, 'A\n2\n1\n3\n7',
'A\n9\n9\n9\n9',
'A\n2\nV\n4\n1',
'A\n2\n1\n\n7',
'A\n3\n1\n3\n3',
'A\n\n\nB\nB']], columns =[f'Col {i}' for i in range(1,9)])
df
Col 1 Col 2 Col 3 Col 4 Col 5 Col 6 Col 7 Col 8
0 1 2 A\n2\n1\n3\n7 A\n9\n9\n9\n9 A\n2\nV\n4\n1 A\n2\n1\n\n7 A\n3\n1\n3\n3 A\n\n\nB\nB
我认为创建第二个数据框比修改现有的数据框更容易。即,
df_rep = pd.DataFrame(index = range(len(df['Col 3'][0].split('\n'))), #number of indexes defined by col3
columns =[f'Col {i}' for i in range(1,9)])
df_rep
df_rep['第 1 列'] = df.iat[0,0] df_rep['第 2 列'] = df.iat[0,1] 对于范围 (3,9) 内的 i: df_rep['Col {}'.format(i)] = df['Col {}'.format(i)][0].split(' ') df_rep