簡體   English   中英

通過比較日期刪除DataFrame行

[英]Removing DataFrame rows by comparing dates

我有一個數據集,只想在一個時間范圍內包含行。 我將所有好的行放入Series對象中。 但是,當我將該對象重新分配給DataFrame對象時,會得到NaT值:

碼:

def get_tweets_from_range_in_csv():
    csvfile1 = "results_dataGOOGL050"
    df1 = temp(csvfile1)


def temp(csvfile):
    tweetdats = []
    d = pd.read_csv(csvfile + ".csv", encoding='latin-1')
    start = datetime.datetime.strptime("01-01-2018", "%d-%m-%Y")
    end = datetime.datetime.strptime("01-06-2018", "%d-%m-%Y")
    for index, current_tweet in d['Date'].iteritems():
        date_tw = datetime.datetime.strptime(current_tweet[:10], "%Y-%m-%d")
        if start <= date_tw <= end:
            tweetdats.append(date_tw)
        else:
            d.drop(index, inplace=True)
    d = d.drop("Likes", 1)
    d = d.drop("RTs", 1)
    d = d.drop("Sentiment", 1)
    d = d.drop("User", 1)
    d = d.drop("Followers", 1)
    df1['Date'] = pd.Series(tweetdats)
    return d

tweetdats的輸出:

tweetdats
Out[340]: 
[datetime.datetime(2018, 1, 30, 0, 0),
 datetime.datetime(2018, 4, 1, 0, 0),
 datetime.datetime(2018, 4, 1, 0, 0),
 datetime.datetime(2018, 4, 1, 0, 0),
 datetime.datetime(2018, 1, 5, 0, 0),
 datetime.datetime(2018, 1, 5, 0, 0),
 datetime.datetime(2018, 1, 8, 0, 0),
 datetime.datetime(2018, 1, 20, 0, 0),
 datetime.datetime(2018, 1, 22, 0, 0),
 datetime.datetime(2018, 1, 5, 0, 0)]

您無需使用for循環遍歷數據框即可選擇感興趣的時間范圍內的行。

讓我們假設您的初始數據框df有一個“日期”列,其中包含日期時間格式的日期; 然后,您可以簡單地創建一個新的數據new_df

new_df=df[(pd.to_datetime(df.time) > start) & (pd.to_datetime(self.df.time) < end)] 

這樣,您不必復制和粘貼系列中的“好”行,然后將它們重新分配給數據框。

您的temp函數如下所示:

def temp(csvfile):
    df = pd.read_csv(csvfile + ".csv", encoding='latin-1')
    start = datetime.datetime.strptime("01-01-2018", "%d-%m-%Y")
    end = datetime.datetime.strptime("01-06-2018", "%d-%m-%Y")
    new_df=df[(pd.to_datetime(df.time) > start) & (pd.to_datetime(self.df.time) < end)]

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM