Могу ли я читать B.csv и записывать в A.csv в новых столбцах без чтения A.csv?

#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 with to_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)