【问题标题】:How do I append a DataFrame while using a for loop?如何在使用 for 循环时附加 DataFrame?
【发布时间】:2017-06-21 18:33:26
【问题描述】:

我正在尝试获取不同日期的推文并将它们附加到数据框中,最后写入 csv 文件。文本文件附加推文,但 df 被覆盖,csv 文件也是如此。

这是我的代码:

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 文件在每个连续日期都被覆盖。我尝试附加数据框但失败了。

【问题讨论】:

    标签: python pandas for-loop dataframe twitter


    【解决方案1】:

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

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

    同时将 header 设置为 False,这样就不会再次添加了

    【讨论】:

    • 它工作的兄弟。谢谢,但是由于它不包含任何标题,您能告诉我如何添加标题而不显式创建列名列表并使用 col_name 将其分配给标题。
    猜你喜欢
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2019-05-31
    • 2021-10-15
    • 2019-10-24
    • 2021-05-19
    相关资源
    最近更新 更多