首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用熊猫只向现有的csv添加新行?

使用熊猫只向现有的csv添加新行?
EN

Stack Overflow用户
提问于 2020-02-20 19:41:19
回答 1查看 1.6K关注 0票数 1

好的,我不知道如何正确地编程。我尝试了许多组合,因为逻辑是错误的,我已经到了死胡同。我已经设法从网上获取数据,并将这些数据放入使用熊猫的csv文件中。脚本将每15分钟运行一次以获取数据。

在下面的例子中,我创建了一个名为"data“的虚拟模型。如果有新的更新可用,数据有时会有所不同,有时会根据提供者所做的更改而保持不变。

但是,如果我再次运行该脚本,它只会使用相同的数据填充csv文件。这是我不想要的,但我只想添加行,如果有新的唯一数据,就追加行。

作为一个例子

代码语言:javascript
复制
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')

然而,这是行不通的,给我错误的数据,所以逻辑是错误的。该怎么做才能得到我想要的?有什么更好的方法可以使用吗?

更新

在好朋友的帮助下改变了剧本..。

代码语言:javascript
复制
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)

代码语言:javascript
复制
>>> 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吗?

EN

回答 1

Stack Overflow用户

发布于 2020-02-20 20:18:44

读取现有文件时,它将第一行作为标题。

由于您没有使用标头,所以指定不要读取它

替换

代码语言:javascript
复制
oldFrame = pd.read_csv('filename.csv')

通过

代码语言:javascript
复制
oldFrame = pd.read_csv('filename.csv', header=None)

另外,drop_duplicates中删除 keep=False

代码语言:javascript
复制
df_diff = pd.concat([oldFrame, df],ignore_index=True).drop_duplicates()

mode='a'时的to_csv

代码语言:javascript
复制
df_diff.to_csv('filename.csv', header=False)

更新

注意:我编辑了两个to_csv调用

最终脚本

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60327411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档