Я работаю с набором данных 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
Пропуск пустой строки и исправление несоответствия длины ⇐ Python
Программы на Python
-
Anonymous
1732720785
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'][i] == "NaN":
df.dropna(axis = 0, subset = ['Col 3'], inplace = True)
elif len(df['Col 3'][i]) != len(df['Col 4'][i]):
single_rep = pd.DataFrame(index = range(len(df['Col 3'][i].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)][i].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'][i].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)][i].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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79230796/skipping-empty-row-and-fixing-length-mismatch[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия