2017-06-21 157 views
0

我试图获取不同日期的推文,并将它们追加到一个数据框中,最后写入一个csv文件。文本文件追加推文,但df被覆盖,csv文件也被覆盖。如何在使用for循环时追加数据框?

这里是我的代码:

import datetime 
x= datetime.date.today() 
y= x.strftime('%Y-%m-%d') 
c= datetime.date.today() - datetime.timedelta(days=1) 
d= c.strftime('%Y-%m-%d') 
e= datetime.date.today() - datetime.timedelta(days=2) 
f= e.strftime('%Y-%m-%d') 
g= datetime.date.today() - datetime.timedelta(days=3) 
h= g.strftime('%Y-%m-%d') 
i= datetime.date.today() - datetime.timedelta(days=4) 
j= i.strftime('%Y-%m-%d') 
k= datetime.date.today() - datetime.timedelta(days=5) 
l= k.strftime('%Y-%m-%d') 
m= datetime.date.today() - datetime.timedelta(days=6) 
n= m.strftime('%Y-%m-%d') 
o= datetime.date.today() - datetime.timedelta(days=7) 
p= o.strftime('%Y-%m-%d') 

a=[p,n,l,j,h,f,d] 
b=[n,l,j,h,f,d,y] 
for i in range(len(a)): 
    data = Cursor(api.search, q, since=a[i], until=b[i]).items() 
    tweet_data = [] 
    # current_working_dir = os.path.dirname(os.path.realpath(__file__)) 
    current_working_dir = "./" 
    log_tweets = current_working_dir + '_tweets.txt' 
    with open(log_tweets, 'a') as outfile: 
     for tweet in data: 
      tweet_data.append(json.loads(json.dumps(tweet._json))) 
      outfile.write(json.dumps(tweet._json)) 
      outfile.write("\n") 

    print "text file written" 
    # Create the dataframe to be used 
tweets = pd.DataFrame() 
tweets['Tweet'] = map(lambda tweet: tweet['text'].encode('utf-8'), tweet_data) 
tweets['Dates'] = map(lambda tweet: time.strftime('%Y-%m-%d %H:%M:%S', time.strptime(tweet['created_at'],'%a %b %d %H:%M:%S +0000 %Y')), tweet_data) 
tweets['User'] = map(lambda tweet: tweet['user']['screen_name'], tweet_data) 
tweets.to_csv("string.csv", sep=",", index=False) 

print " String CSV written......" 

我的CSV文件被覆盖每个连续的日期。我试图追加数据帧但失败了。

回答

1

Pandas to_csv的默认模式是写入,它将覆盖文件。追加的正确方法应该是:

tweets.to_csv('string.csv', mode='a', header=False, index=False)

还设置标题为False,以便它不会再次加

+0

它工作的弟弟。谢谢,但由于它不包含任何头文件,你能告诉我如何添加头文件而不用明确地创建一个列名列表并使用col_name将它分配给头文件。 – lightyagami96