использование данных из одного столбца в рамках обновления для другого столбца с использованием Панд из очень большого csv-файла

#python #pandas #dataframe #csv

Вопрос:

У меня есть очень большой CSV-файл, в котором я создаю URL-адрес, используя данные из одного столбца [c], и обновляю соответствующую ячейку столбца [f] новой информацией. Хотя я много программирую на Python, я не так часто использую Панд, поэтому я не уверен, где решить эту проблему.

F-это конечный результат, поэтому я использую столбец C в качестве имени изображения, URL-адрес тот же.

 | c       | f                          |
| ------- | -------------------------- |
| 2134    | http://url.com/2134.jpg    |
| 3e32    | http://url.com/3e32.jpg    |
| jhknh   | http://url.com/jhknh.jpg   |
| 12.12.3 | http://url.com/12.12.3.jpg |
 

Я искал, но не смог найти осуществимого решения. Я знаю, что мне, вероятно, пришлось бы использовать chunksize для этого, так как может быть более 20000 записей.

Любая помощь в этом будет весьма признательна. Я посмотрел и попробовал несколько вещей, но я не могу придумать решение.

Заранее спасибо

~ E

Комментарии:

1. У F есть старый URL-адрес, который я могу удалить перед любым обновлением.

2. @ Michael Szczesny URL-адрес будет жестко закодирован в моем скрипте python, поэтому единственной переменной будет имя изображения, которое будет исходить из столбца C. Так что ` df = pd.read_csv('yourdatafile.csv') df['f'] = 'http://url.com/' df.c '.jpg' df

Выход

          c                           f
0     2134     http://url.com/2134.jpg
1     3e32     http://url.com/3e32.jpg
2   jhnkhk   http://url.com/jhnkhk.jpg
3  12.12.1  http://url.com/12.12.1.jpg
 

Если ваши записи не помещаются в памяти, вы можете разбить свои данные на фрагменты и добавить каждый фрагмент в новый файл.

 header = True
for chunk in pd.read_csv('yourdatafile.csv', chunksize=1000):
    chunk['f'] = 'http://newurl.com/'   chunk.c   '.jpg'
    chunk.to_csv('newdata.csv', mode='a ', index=False, header=header)
    header = False
 

Комментарии:

1. это было именно то, что я искал, спасибо!

2. В header = True довершение for loop всего , я им не пользовался, и это сработало. Не могли бы вы немного подробнее остановиться на этом? еще раз спасибо вам.

3. Я хотел, чтобы заголовок был первой строкой в новом CSV-файле, но никаких других заголовков для каждого добавленного фрагмента. Это один из способов достичь этого.

4. Размер тестового файла, который я использую, был меньше, чем chunksize у, поэтому я не заметил. При импорте файла pd.read_csv('yourdatafile.csv', header=0, chunksize=1000): я предполагаю, что это не дает вам того, чего вы хотите, иначе вы бы использовали его.