2016-11-26 1 views
1

Ich habe an einem Projekt gearbeitet, und müssen die "Vektor" Monate ausfüllen (um ein Histogramm zu machen: Übersicht über die Anzahl der Tweets pro Monat). Zum Ausfüllen der Vektor Monat schrieb ich den folgenden Code:Wie zu implementieren und wenn/Elif/Else-Anweisung in Pandas (Python)

numTweets = list(tweets_cleaned_panda.iloc[:,1]) 

months = [0, 0, 0, 0, 0, 0, 0] 
for i in range(0,len(numTweets)+1): 

if tweets_cleaned_panda['created_at'].str.contains("Mar") or tweets_cleaned_panda['created_at'].str.contains("Apr"): 
months[0] = months[0] + 1 
elif tweets_cleaned_panda['created_at'].str.contains("May"): 
months[1] += 1 
elif tweets_cleaned_panda['created_at'].str.contains("Jun"):  
months[2] += 1 
elif tweets_cleaned_panda['created_at'].str.contains("Jul"):  
months[3] += 1 
elif tweets_cleaned_panda['created_at'].str.contains("Aug"):  
months[4] += 1 
elif tweets_cleaned_panda['created_at'].str.contains("Sept"): 
months[5] += 1 
else: 
months[6] += 1 
print months 

Ich habe versucht, Anfügen .any() an den Enden der contains() Aussagen aber als es füllt nur Monat [0].

Ferner schrieb ich den folgenden Code:

for i in range(0,len(numTweets)+1): 
np.where(tweets_cleaned_panda['created_at'].str.contains("Mar"), 
    months[0] = months[0] + 1, 
     np.where(tweets_cleaned_panda['created_at'].str.contains("Apr"), 
       months[0] = months[0] + 1, 
       np.where(tweets_cleaned_panda['created_at'].str.contains("May"), 
         months[1] = months[1] + 1, 
         np.where(tweets_cleaned_panda['created_at'].str.contains("Jun"), 
           months[2] = months[2] + 1, 
           np.where(tweets_cleaned_panda['created_at'].str.contains("Jul"), 
             months[3] = months[3] + 1, 
             np.where(tweets_cleaned_panda['created_at'].str.contains("Aug"), 
               months[4] = months[4] + 1, 
               np.where(tweets_cleaned_panda['created_at'].str.contains("Sept"), 
                 months[5] = months[5] + 1, 
                 np.where(tweets_cleaned_panda['created_at'].str.contains("Oct"), 
                   months[6] =months[]+ 1)))))))) 

Aber dies gab den folgenden Fehler:

SyntaxError: keyword can't be an expression File "", line 10 months[0] = months[0] + 1, SyntaxError: keyword can't be an expression

Jeder, der helfen kann?

+1

Es ist schon lange her, dass ich mit Tweets gearbeitet habe, aber wenn ich mich recht erinnere, kann 'created_at' einfach in datetime konvertiert werden. Können Sie dafür ein Beispiel posten? – ayhan

+0

@ayhan, weiter im Code habe ich das created_at in ein datetiem.date Format konvertiert! (Beispiel ist: datetime.date (2016, 3, 30)) Soll ich dieses Format für meine Berechnungen verwenden? – ClS

+0

Wow, das ist ein Monster-Monster. Warum erstellen Sie keine Liste von Monaten wie 'Monate = [" Jan "," Feb "," Mar "," Apr "," Mai "," Jun "," Jul "," Aug " , "Sept", "Okt", "Nov", "Dez"] ' Dann können Sie etwas wie schreiben: ' für i in Bereich (0, len (numTweets) +1): für j in Monaten: np.where (tweets_cleaned_panda [ 'created_at']. str.contains (j) Monate [i] + = 1 ' ich bin nicht hundertprozentig sicher, dass Code funktioniert, da ich auf meinem Computer nicht installiert haben Pandas , aber das wäre eine logische Lösung für mich .. Code würde wie folgt aussehen (http://pastebin.com/ipYwD5JJ) – mutantkeyboard

Antwort

1

Pandas funktioniert sehr gut mit Datetime-Daten. pd.to_datetime Funktion können Sie UTC formatiert Zeit konvertieren:

pd.to_datetime("Wed Aug 27 13:08:45 +0000 2008") 
Out Timestamp('2008-08-27 13:08:45') 

Wenn Sie zuerst die Spalte mit konvertieren:

df['created_at'] = pd.to_datetime(df['created_at']) 

Dann können Sie .dt Accessor für die Monatsspalte verwenden:

df['month'] = df['created_at'].dt.month 

Um eine Häufigkeitsverteilung zu erhalten, müssen Sie nur value_counts:

anrufen
df['month'].value_counts() 

Hinweis: Sie müssen df durch den Namen Ihres DataFrame ersetzen (tweets_cleaned_panda).

+0

Wenn ich de 3de Zeile Ihres Codes (df ['Monat'] = df ['created_at']. Dt.month), mit dem df ändern, um den Namen meines Dataframes, bekomme ich den folgenden Fehler: 'Series' Objekt hat kein Attribut 'dt' – ClS

+0

Ich denke du verwendest eine alte Version Kannst du deine Pandas aktualisieren? – ayhan

+0

Wir müssen unser Projekt in Databricks machen, (In Spark 2.0). Also kann ich es nicht richtig aufrüsten :( – ClS

Verwandte Themen