Excel смещает столбцы при добавлении кадра данных в CSV

У меня есть программа, которая принимает URL качестве входных данных, и проверяет его по df который я читаю из csv:

   Name   ID      Date                    URL
0  Faye  111  12/31/16   https://www.url1.com
1  Faye  111   3/31/17   https://www.url2.com
2  Mike  222   3/31/17   https://www.url3.com
3  Mike  222   6/30/18   https://www.url4.com
4  Mike  222   9/30/18   https://www.url5.com
5   Jim  333   9/30/18   https://www.url6.com

Если URL не существует в df , программа выполняет некоторый код, а затем добавляет новую строку с URL в df ; иначе он переходит на другой URL .

Программа работает нормально, если я просто запустил ее, остановил и перезапустил. Но если я удаляю существующую строку (например, [1] ) непосредственно из файла csv в Excel, чтобы обработать данные для этого URL-адреса, он добавляется в столбец [4] и строку [5] в df :

   Name   ID      Date                    URL
0  Faye  111  12/31/16   https://www.url1.com
2  Mike  222   3/31/17   https://www.url3.com
3  Mike  222   6/30/18   https://www.url4.com
4  Mike  222   9/30/18   https://www.url5.com
5   Jim  333   9/30/18   https://www.url6.com    Faye  111   3/31/17   https://www.url2.com

вместо добавления в строку [6] в качестве новой строки, что происходит, когда я удаляю строку в текстовом редакторе (а не в Excel):

   Name   ID      Date                     URL
    ...  ...       ...                     ...
5   Jim  333   9/30/18    https://www.url6.com
6  Faye  111   3/31/17    https://www.url2.com

Я добавляю данные в существующий csv через df.to_csv('~/file.csv', mode='a', header=False, index=False) , поэтому кто-нибудь может определить, что я делаю неправильно?

Всего 1 ответ


Вместо того, чтобы пытаться добавить другой (1-строчный) фрейм данных в качестве другого куска CSV-файла:

df.to_csv('~/file.csv', mode='a', header=False, index=False)

сначала добавьте его в свой фрейм данных

df = df.append(your_1_row_df, ignore_index=True)

и только затем запишите его в ваш ~/file.csv , на этот раз с режимом (по умолчанию) 'w' (фактически переписав его):

df.to_csv('~/file.csv', header=False, index=False)

Есть идеи?

10000