在Python中仅将新值从DataFrame附加到CSV

时间:2019-03-27 22:23:34

标签: python pandas csv dataframe

假设我有一个看起来像这样的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 :(得分:0)

您可以在写入后重新读取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)