Пропуск пустой строки и исправление несоответствия длиныPython

Программы на Python
Ответить
Anonymous
 Пропуск пустой строки и исправление несоответствия длины

Сообщение Anonymous »

Я работаю с набором данных Excel, который выглядит следующим образом

< thead>

Колонка 1
Колонка 2
Колонка 3
Колонка 4
Колонка 5
Колонка 6
Колонка 7
Колонка 8

< /thead>


1
2
A\ n \nB
C\n \nD
E\n \nF
G\n \nH
I\n \nJ
K\n \nL


3
4








5
6
a\n \nb
c
e\n \nf
г\n \nh
i\n \nj
k\n \nl



Я хочу использовать столбец 3, чтобы определить, сколько новых строк необходимо создать, а затем разделите столбцы с 3 по 8 на основе «\n \n». Мои две проблемы связаны с тем, что столбец 3 пуст и когда между столбцами 3 и 4 есть несоответствие длины.
Моя цель — получить набор данных, который выглядит следующим образом



Колонка 1< /th>
Колонка 2
Колонка 3
Колонка 4
Колонка 5
Колонка 6
Колонка 7
Колонка 8



1
2
A
C
E
G
I
K


1
2
B
D
F
H
J
L


5
6
a
c
e
g
i
k


5
6
b
c
f
h
j
l



Вы можете видеть, что в наборе целевых данных столбцы 1 и столбец 2 реплицируются для новой созданной строки, а строка, содержащая пустой столбец 3, была удалено, а строка с несоответствием длины между столбцами 3 и 4 просто скопировала значение для новой строки, поскольку разбивать нечего.
Ниже приведен сценарий, над которым я работал. Вы можете увидеть закомментированный раздел if/elif/else, который я пытался использовать для решения двух моих проблем. Проблем не возникает, когда столбец 3 заполнен, а длина индексов в столбцах 3–8 одинакова.
def splitappendix(moduleName):
tableHeaders = ["A", "B", "C", "D", "E", "F", "G", "H"]
splitfunctionHeaders = ["Col 1", "Col 2", "Col 3", "Col 4", "Col 5", "Col 6", "Col 7", "Col 8"]

df = pd.read_excel(f'Output\\{moduleName}')
df.columns = splitfunctionHeaders

PrintConsole(df)

for i, row in df.iterrows():
df.dropna(axis = 0, subset = ['Col 3'], inplace = True)

PrintConsole(df)

df_rep = pd.DataFrame(columns =[f'Col {i}' for i in range(1,9)])

for i, row in enumerate(df.index):
'''
if df.isnull().iloc[i,2]:
df.dropna(axis = 0, subset = ['Col 3'], inplace = True)

if df['Col 3'] == "NaN":
df.dropna(axis = 0, subset = ['Col 3'], inplace = True)

elif len(df['Col 3']) != len(df['Col 4']):
single_rep = pd.DataFrame(index = range(len(df['Col 3'].split('\n \n'))), columns =[f'Col {i}' for i in range(1,9)])
single_rep['Col 1'] = df.iat[i,0]
single_rep['Col 2'] = df.iat[i,1]
single_rep['Col 4'] = df.iat[i,3]
PrintConsole(single_rep)
for j in range(3,3) and range(5,9):
single_rep['Col {}'.format(j)] = df['Col {}'.format(j)].split('\n \n')
df_rep = pd.concat([df_rep, single_rep])
PrintConsole(df_rep)
'''
#else:
single_rep = pd.DataFrame(index = range(len(df['Col 3'].split('\n \n'))), columns =[f'Col {i}' for i in range(1,9)])
single_rep['Col 1'] = df.iat[i,0]
single_rep['Col 2'] = df.iat[i,1]
PrintConsole(single_rep)
for j in range(3,9):
single_rep['Col {}'.format(j)] = df['Col {}'.format(j)].split('\n \n')
df_rep = pd.concat([df_rep, single_rep])
PrintConsole(df_rep)
df_rep.reset_index(drop=True, inplace=True)

df_rep.columns = tableHeaders

PrintConsole(df_rep)

#df_rep.to_excel(f'Output\\{moduleName}')

if __name__ == "__main__":

moduleName = 'Appendix.xlsx'
splitappendix(moduleName)
PrintConsole("Split Complete")
ExitCode()


Подробнее здесь: https://stackoverflow.com/questions/792 ... h-mismatch
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»