Добавлять только новые значения в CSV из DataFrame в Python - PullRequest
0 голосов
/ 28 марта 2019

Предположим, у меня есть файл CSV, который выглядит следующим образом:

Date,High,Low,Open,Close,Volume,Adj Close
1980-12-12,0.515625,0.5133928656578064,0.5133928656578064,0.5133928656578064,117258400.0,0.02300705946981907
1980-12-15,0.4888392984867096,0.4866071343421936,0.4888392984867096,0.4866071343421936,43971200.0,0.02180669829249382
1980-12-16,0.453125,0.4508928656578064,0.453125,0.4508928656578064,26432000.0,0.02020619809627533

У меня также есть Pandas DataFrame, который имеет точно такие же значения, но также и новые записи. Моя цель - добавить в файл CSV только новые значения.

Я пробовал вот так, но, к сожалению, это добавляет не только новые записи, но и старые:

df.to_csv('{}/{}'.format(FOLDER, 'AAPL.CSV'), mode='a', header=False)

1 Ответ

0 голосов
/ 28 марта 2019

Вы можете просто перечитать свой CSV-файл после записи и удалить любые дубликаты перед добавлением вновь полученных данных.

У меня работал следующий код:

import pandas as pd

# Creating original csv
columns = ['Date','High','Low','Open','Close','Volume','Adj Close']
original_rows = [["1980-12-12",0.515625,0.5133928656578064,0.5133928656578064,0.5133928656578064,117258400.0,0.02300705946981907], ["1980-12-15",0.4888392984867096,0.4866071343421936,0.4888392984867096,0.4866071343421936,43971200.0,0.02180669829249382
]]
df_original = pd.DataFrame(columns=columns, data=original_rows)
df_original.to_csv('AAPL.CSV', mode='w', index=False)

# Fetching the new data
rows_updated = [["1980-12-12",0.515625,0.5133928656578064,0.5133928656578064,0.5133928656578064,117258400.0,0.02300705946981907], ["1980-12-15",0.4888392984867096,0.4866071343421936,0.4888392984867096,0.4866071343421936,43971200.0,0.02180669829249382
], ["1980-12-16",0.453125,0.4508928656578064,0.453125,0.4508928656578064,26432000.0,0.02020619809627533]]
df_updated = pd.DataFrame(columns=columns, data=rows_updated)

# Read in current csv values
current_csv_data = pd.read_csv('AAPL.CSV')

# Drop duplicates and append only new data
new_entries = pd.concat([current_csv_data, df_updated]).drop_duplicates(subset='Date', keep=False)
new_entries.to_csv('AAPL.CSV', mode='a', header=False, index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...