好的,我不知道如何正确地编程。我尝试了许多组合,因为逻辑是错误的,我已经到了死胡同。我已经设法从网上获取数据,并将这些数据放入使用熊猫的csv文件中。脚本将每15分钟运行一次以获取数据。
在下面的例子中,我创建了一个名为"data“的虚拟模型。如果有新的更新可用,数据有时会有所不同,有时会根据提供者所做的更改而保持不变。
但是,如果我再次运行该脚本,它只会使用相同的数据填充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...")用相同的“数据”值多次运行脚本.但是,dataframe的输出如下(如果调用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吗?
发布于 2020-02-20 20:18:44
读取现有文件时,它将第一行作为标题。
由于您没有使用标头,所以指定不要读取它。
替换
oldFrame = pd.read_csv('filename.csv')通过
oldFrame = pd.read_csv('filename.csv', header=None)另外,在drop_duplicates中删除 keep=False
df_diff = pd.concat([oldFrame, df],ignore_index=True).drop_duplicates()和mode='a'时的to_csv
df_diff.to_csv('filename.csv', header=False)更新
注意:我编辑了两个to_csv调用
最终脚本
import os
import requests
import pandas as pd
from datetime import datetime
import csv
data = [('Peter', 18, 7), ('Dick',22,2),
('Riff', 15, 6),
('John', 17, 8),
('Michel', 18, 7),
('NEW', 2, 5),
('other', 2, 5),
('Sheli', 17, 5) ]
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, index=False)
else: # else it exists so append
df.to_csv('filename.csv', header=False, index=False)https://stackoverflow.com/questions/60327411
复制相似问题