首页 > 解决方案 > 只有一小部分数据框被合并到 pandas - python

问题描述

我的问题很简单。我有一个带有 124957 条不同推文(与中心主题相关)的 pandas 数据框。问题是每个日期都有超过 1 条推文(每天大约 300 条)。

我的目标是对每天的推文进行情绪分析。为了解决这个问题,我试图将同一天的所有推文组合成一个字符串(对应于每个日期)。

为此,我尝试了以下方法:

indx=0
get_tweet=""
for i in range(0,len(cdata)-1):
    get_date=cdata.date.iloc[i]
    next_date=cdata.date.iloc[i+1]
    if(str(get_date)==str(next_date)):
        get_tweet=get_tweet+cdata.text.iloc[i]+" "
    if(str(get_date)!=str(next_date)):
        cdata.loc[indx,'date'] = get_date
        cdata.loc[indx,'text'] = get_tweet
        indx=indx+1
        get_tweet=" "

df.to_csv("/home/development-pc/Documents/BTC_Tweets_1Y.csv")

我的问题是,实际上只有一小部分数据被转换为我选择的格式。

数据框的图像

我不知道它是否重要,但数据框由三个单独的数据集组成,我使用“pd.concat”将它们组合成一个。之后,我按日期(升序)对新创建的数据帧进行排序,并在索引反转时重置索引(最后一个输入 (2020-01-03) = 0 和第一个输入 (2019-01-01) = 124958)。

提前致谢, 菲利普斯

标签: pythonpandasdataframedataset

解决方案


无需进入您使用的循环(认为您只是连接两个第一个实例,不确定)您可以使用 groupby 并应用,这是一个示例:

# create some random data for example
import pandas as pd
import random
import string
dates = random.choices(pd.date_range(pd.Timestamp(2020,1,1), pd.Timestamp(2020,1,6)),k=11)
letters = string.ascii_lowercase
texts = [' '.join([''.join(random.choices(letters, k=random.randrange(2,10))) for x in 
range(random.randrange(3,12))]) for x in range(11)]
df = pd.DataFrame({'date':dates, 'text':texts})

# group
pd.DataFrame(df.groupby('date').apply(lambda g: ' '.join(g['text']))) 

推荐阅读