【发布时间】:2020-02-20 19:41:19
【问题描述】:
好的,我不知道如何正确编程。尝试了很多组合,但由于逻辑错误,我已经走到了死胡同。我设法从网络上获取数据,并使用 pandas 将这些数据放在一个 csv 文件中。该脚本将每 15 分钟运行一次以获取数据。
在下面的这种情况下,我创建了一个名为“数据”的虚拟对象。 如果有新的更新可用,数据有时会有所不同,有时会根据提供商所做的更改而看起来相同。
但是,如果我再次运行脚本,它只会用相同的数据填充 csv 文件。这是我不想要的,但我只想添加行,如果有新的唯一数据则追加。
举个例子
import os
import requests
import pandas as pd
from datetime import datetime
import html5lib
import csv
data = [('Peter', 18, 7), ('Dick',22,2),
('Riff', 15, 6),
('John', 17, 8),
('Michel', 18, 7),
('Sheli', 17, 5) ]
df = pd.DataFrame(data)
# if file exists....
if os.path.isfile('filename.csv'):
#Old data
oldFrame = pd.read_csv('filename.csv')
#Concat
df_diff = pd.concat([oldFrame, df],ignore_index=True).drop_duplicates(keep=False)
#Write new rows to csv file
df_diff.to_csv('filename.csv', mode='a', header=False)
else: # else it exists so append
df.to_csv('filename.csv')
但是这不起作用并且给了我错误的数据,所以逻辑是错误的。怎么做才能达到我想要的?有没有更好的方法可以使用?
更新
在好人的帮助下改成这样的脚本...
import os
import requests
import pandas as pd
from datetime import datetime
import html5lib
import csv
data = [('Adam', 18, 7), ('Magnus',22,2),('Lena',22,2),('Gringo', 18, 7)]
df = pd.DataFrame(data)
##
### if file exists....
if os.path.isfile('filename.csv'):
#Old data
oldFrame = pd.read_csv('filename.csv', header=None)
#Concat
df_diff = pd.concat([oldFrame, df], ignore_index=True).drop_duplicates()
#Write new rows to csv file
df_diff.to_csv('filename.csv', header=False)
else:
# else it exists so append
df.to_csv('filename.csv')
print("File Created...")
多次使用相同的“数据”值运行脚本...... 但是数据帧的输出看起来像这样(如果调用 oldFrame)
>>> oldFrame
0 1 2 3 4 5 6
0 0 0 0 NaN 0 1.0 2.0
1 1 1 1 0.0 Adam 18.0 7.0
2 2 2 2 1.0 Magnus 22.0 2.0
3 3 3 3 2.0 Lena 22.0 2.0
4 4 4 4 3.0 Gringo 18.0 7.0
5 5 5 5 Adam 18 7.0 NaN
6 6 6 6 Magnus 22 2.0 NaN
7 7 7 7 Lena 22 2.0 NaN
8 8 8 8 Gringo 18 7.0 NaN
9 9 9 Adam 18 7 NaN NaN
10 10 10 Magnus 22 2 NaN NaN
11 11 11 Lena 22 2 NaN NaN
12 12 12 Gringo 18 7 NaN NaN
13 13 Adam 18 7 NaN NaN NaN
14 14 Magnus 22 2 NaN NaN NaN
15 15 Lena 22 2 NaN NaN NaN
16 16 Gringo 18 7 NaN NaN NaN
由于数据相同,不应该更改csv吗?
【问题讨论】:
-
如果您已经将旧数据连接到新数据,为什么还需要附加到 csv?旧数据会出现两次
-
Trigonom - 你说得有道理。但是如何比较新数据和旧数据呢?
标签: python-3.x pandas csv