2016-10-18 2 views
0

Ich habe Code-Schnipsel folgen, die mir hilft, Google Trends Daten zu erhalten (siehe https://github.com/GeneralMills/pytrends):Python: Anwenden Funktion zur Liste der TEMS

trend_payload = {'q': 'Dogs, Cats, Catfood, Dogfood','date': '01/2015 12m'} 
trend = pytrend.trend(trend_payload) 
df = pytrend.trend(trend_payload, return_type='dataframe') 
df 

Da diese Abfrage hat den Nachteil, dass Google Trends alle Daten basieren normalisiert auf die abgefragten Daten, ich ziehe es vor, jeden einzelnen Anruf zu machen und die df nebeneinander zu verketten. Ich dachte über eine Funktion wie folgt nach:

queries = ['Cats', 'Dogs', 'Catfood','Dogfood'] 

function(queries) 
    trend_payload = {'q': queries, 'date': '01/2015 12m'} 
    trend = pytrend.trend(trend_payload) 
    df = pytrend.trend(trend_payload, return_type='dataframe') 

# then put every df of each query next to each other 

Wie kann ich das tun?

+0

Ich bin mir nicht sicher, ob ich die Frage verstehe: Möchten Sie mit [function ([query,]) für Abfragen in Abfragen arbeiten]? (Where-Funktion gibt das DF zurück). – jimifiki

+0

Ja, ich möchte eine Funktion, die auf jedes Element in der Liste "Abfragen" angewendet wird. Die Ergebnisse sollten in einen Datenrahmen eingefügt werden, der die Ergebnisse für jeden Eintrag in der Liste enthält. – RPacker

+1

Sind die Datenrahmen der Panda-Datenframes? In diesem Fall können Sie die "concat" -Funktion nutzen, um das df zu verketten. – jimifiki

Antwort

1

Ich würde einfach DFs als jimifiki has already proposed verketten:

df = pd.concat([pytrend.trend({'q': x, 'date': '01/2015 12m'}, 
           return_type='dataframe') 
       for x in queries], axis=1) 

oder in der Funktion:

def get_trends(queries, dt): 
    return pd.concat([pytrend.trend({'q': x, 'date': dt}, 
            return_type='dataframe') 
         for x in queries], axis=1) 

df = get_trends(queries, '01/2015 12m') 

Demo:

In [24]: df = get_trends(queries, '01/2015 12m') 

In [25]: df 
Out[25]: 
      cats dogs catfood dogfood 
Date 
2015-01-04 74.0 85.0  65.0  47.0 
2015-01-11 74.0 84.0  60.0  52.0 
2015-01-18 72.0 82.0  49.0  57.0 
2015-01-25 69.0 78.0  45.0  37.0 
2015-02-01 73.0 77.0  51.0  52.0 
...   ... ...  ...  ... 
2015-11-29 83.0 80.0  47.0  49.0 
2015-12-06 80.0 79.0  70.0  50.0 
2015-12-13 83.0 84.0  67.0  49.0 
2015-12-20 89.0 91.0  61.0  58.0 
2015-12-27 90.0 100.0  58.0  45.0 

[52 rows x 4 columns] 
+0

Das hat es gelöst :) – RPacker

+0

eine letzte Frage hier: – RPacker

+0

Ich muss die Abfrage an einen anderen Begriff zu verankern. d.h. jede Abfrage hat eine Variable, die statisch ist, und eine andere, die aus der Liste stammt. Die Abfrage ist also immer pytrend.trend ({'q': 'Tiere, x', 'Datum': '01/2015 12m '}, return_type =' Dataframe ') für x in Abfragen], axis = 1). Können wir das auch machen? – RPacker

1

Sie können auf dieser Arbeit:

queries = ['Cats', 'Dogs', 'Catfood','Dogfood'] 

def function(queries): 
    trend_payload = {'q': queries, 'date': '01/2015 12m'} 
    trend = pytrend.trend(trend_payload) 
    df = pytrend.trend(trend_payload, return_type='dataframe') 
    return df 

list_of_df = [function([query,]) for query in queries] 

dann haben Sie den Datenrahmen in der Liste concat.

Weitere elegant können Sie anrufen:

list_of_df = map(function, queries) 

in diesem Fall sollten Sie function umschreiben, so dass es ein einzelnes Element akzeptiert. Wenn Sie wollen function nicht ändern können Sie schreiben:

list_of_df = map(lambda x: function([x,]), queries) 
+0

Wenn der letzte Schritt angewendet wird, heißt es: "list_of_df = map (Lambda x: Funktion ([x,], Abfragen) ^ SyntaxError: unerwartete EOF beim Parsen" – RPacker

+0

Okay, es gab eine Klammer fehlt. Aber jetzt: "list_of_df = map (Lambda x: Funktion ([x,], Abfragen)) -> TypeError: map() muss mindestens zwei Argumente haben." – RPacker

+2

map wendet die Funktion (erstes Argument) auf jedes Element von (zweites Argument an) Da sie eine Liste als Argument verwenden, müssen Sie die übergebene Funktion als erstes Argument anpassen: 'lambda x: (function [x,])' 'ist eine Funktion, die x verwendet, um es einzufügen eine einzelne Elementliste und übergibt sie an Funktion. – jimifiki

Verwandte Themen