【问题标题】:Only a fraction of the dataframe is merged in pandas - python只有一小部分数据帧被合并到 pandas - python
【发布时间】:2020-08-26 15:47:59
【问题描述】:

我的问题很简单。我有一个带有 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")

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

Image of the dataframe

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

提前致谢, 菲利普斯

【问题讨论】:

标签: python pandas dataframe dataset


【解决方案1】:

没有进入你使用的循环(思考你只是依从两个第一个实例,不确定)你可以使用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']))) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2018-08-06
    • 2016-01-19
    • 1970-01-01
    相关资源
    最近更新 更多