Объединение строки с предыдущими строками в зависимости от критериевPython

Программы на Python
Ответить
Anonymous
 Объединение строки с предыдущими строками в зависимости от критериев

Сообщение Anonymous »

Я пытаюсь исправить полученный мной CSV-файл, в который в данные были вставлены новые строки, эффективно разбивая одну строку данных на несколько с неполными столбцами. Разрывы строк размещаются вместо пробела после завершенного слова.
В зависимости от языкового стандарта десятичные точки обозначаются запятыми (см. столбцы E и F).
Даты в столбце A могут отображаться как дубликаты, но должны оставаться отдельными.

Код: Выделить всё

input.csv
, raw:

Код: Выделить всё

A date;B string;C string;D string;E integer;F integer
08.01.2026;a;b;c;3,7;
;d;;f;;
;e;;;;
;;;;;
08.01.2026;g;h;i;2,11;
;;;j;;
;;;k;;
31.01.2026;l;m;n;8,0;
03.02.2026;o;p;q;;4,9
;;r;s;;

Код: Выделить всё

input.csv
:



(index)
Дата
B строка
C строка
D строка
E целое число
F целое число




0
08.01.2026
a
b
c
3,7



1

d

f




2

e






3








4
08.01.2026
g
h
i
2,11



5



j




6



k




7
31.01.2026
l
m
n
8,0



8
03.02.2026
o
p
q

4,9


9


r
s





Желаемый вывод (пробелы вместо удаленных новых строк):



(индекс)
Дата
B строка
Строка C
Строка D
Целое число E
Целое число F




0
08.01.2026
a d e
b
c f
3,7



4
08.01.2026
g
h
i j k
2,11



7
31.01.2026
l
m
n
8,0



8
03.02.2026
o
p r
q s

4,9


Код: Выделить всё

import pandas as pd

df1 = pd.read_csv("input.csv", sep=";")
Пока я не сортирую input.csv, все данные будут более или менее находиться в правильном положении. У меня есть две идеи, как решить эту проблему:
  • Перебрать все строки. Если в первом столбце A есть какое-либо значение, перейдите к следующей строке.
    • Если в столбце A также есть значение, строка i-1 была правильной (см.: строка 7 правильная).
    • Если значение в столбце A пусто / "", строка i-1 неверна, и недостающие данные можно найти в текущей строке. Объедините данные в строке i с соответствующими столбцами в строке i-1 и отбросьте строку i (см.: строка 0 неполная, а строки 1 и 2 необходимо свернуть в строку 0).
    • Если вся строка пуста, удалите ее (см. строку 3).
    Логика для определения этих двух случаев существует, но я, честно говоря, не могу найти способ объединить/объединить/объединить данные из двух строки друг над другом.
  • Создайте два разных фрейма данных:
    • df1, содержащий исходные данные:

      Код: Выделить всё

      A date;B string;C string;D string;E integer;F integer
      08.01.2026;a;b;c;3,7;
      ;d;;f;;
      ;e;;;;
      ;;;;;
      08.01.2026;g;h;i;2,11;
      ;;;j;;
      ;;;k;;
      31.01.2026;l;m;n;8,0;
      03.02.2026;o;p;q;;4,9
      ;;r;s;;
      
    • df2, содержащий исходные данные, но сдвинутый вверх на 1:

      Код: Выделить всё

      A date;B string;C string;D string;E integer;F integer
      ;d;;f;;
      ;e;;;;
      ;;;;;
      08.01.2026;g;h;i;2,11;
      ;;;j;;
      ;;;k;;
      31.01.2026;l;m;n;8,0;
      03.02.2026;o;p;q;;4,9
      ;;r;s;;
      
    Если df2[A] пуст, соедините/объедините/объедините всю строку с соответствующей строкой в ​​df1. Но у меня осталась та же проблема, что и в варианте 1, поскольку мне еще предстоит найти способ «наложить» две строки друг на друга.
Ближе всего к поиску отдаленно похожей проблемы я могу получить значение предыдущей строки и вычислить новый столбец pandas python. Он вычитает целые числа, но я пытаюсь объединить/добавить строки друг за другом.
Ответить

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

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

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

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

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