#python #pandas #csv #dask
#python #панды #csv #dask
Вопрос:
(csv-файл) записывает цену акций, которая ежедневно просматривается с веб-сайта.
Stock_num Stock_name 20201201
0001 appl 201.3
0002 goog 1001.5
B (csv-файл) новейший обход данных с того же веб-сайта
Stock_num Stock_name 20201202
0001 appl 208.3
0002 goog 999.8
Я хочу использовать pandas для записи B в A в формате ниже (без чтения A).
Stock_num Stock_name 20201201 20201202
0001 appl 201.3 208.3
0002 goog 1001.5 999.8
Я попробовал ниже:
B.to_csv('A.csv',index=False,mode='a', encoding='utf_8_sig')
Но то, что я получил, это:
Stock_num Stock_name 20201201
0001 appl 201.3
0002 goog 1001.5
Stock_num Stock_name 20201202
0001 appl 208.3
0002 goog 999.8
Я знаю, что могу прочитать A.csv и объединить с b.csv, а затем вывести.
Но есть ли способ, которым я могу записать B.csv в A.csv без чтения A.csv?
Комментарии:
1. Используйте
A = A.merge(B)
.2. Таким образом, не следует ли мне сначала прочитать A.csv в pandas?
3. Да, используйте
A = pd.read_csv('A.csv')
иB = pd.read_csv('B.csv')
. Затем,A = A.merge(B)
.4. @MayankPorwal Я не думаю, что это его вопрос. Например, что, если файл A имеет размер 10 ГБ, а файл B — 10 ГБ, а у пользователя на его компьютере всего 16 ГБ. Читая между строк, я думаю, что он пытается добавить к существующему файлу, чтобы ему не приходилось его читать. Если проблема с памятью, я бы рекомендовал использовать
dask
. Вы не можете добавлять сto_csv
помощью like you can withto_sql
или что-то в этом роде. Кроме того, вы можете добавлять только по строкам сto_sql
помощью . Возможно, вы захотите опробоватьcsv
модуль вместо использования pandas, но я не уверен, поскольку это может просто создать другие проблемы.5. @DavidErickson вновь открыл вопрос.
Ответ №1:
Посмотрите dask
, помогает ли это работать быстрее. Вы все еще читаете в обоих файлах, но это может быть в сотни раз быстрее / эффективнее с dask
:
import dask.dataframe as dd
A = dd.read_csv('Desktop/A.csv')
B = dd.read_csv('Desktop/B.csv')
df = A.merge(B)
df = df.compute()
df.to_csv('C.csv', index=False)