Zeile und Spalte auswählen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ForelliX
User
Beiträge: 8
Registriert: Samstag 2. Mai 2020, 08:58

Guten Morgen

Ich möchte auf meinem Smart Mirror Google Trends einbauen. Dazu habe ich ein Skript mit "pytrends" zusammengebaut, welches grundsätzlich gut funktioniert.

Code: Alles auswählen

import pandas as pd                        
from pytrends.request import TrendReq

pytrends = TrendReq(hl='en-US', tz=360)
kw_list = ["Bern"]


pytrends.build_payload(kw_list, cat=0, timeframe='now 1-H', geo='', gprop='')
result = pytrends.interest_over_time()

print(result)
Die Ausgabe sieht so aus:

...
2020-05-02 07:53:00 79 False
2020-05-02 07:54:00 68 False
2020-05-02 07:55:00 62 False
2020-05-02 07:56:00 57 False
2020-05-02 07:57:00 67 False
2020-05-02 07:58:00 89 False
2020-05-02 07:59:00 72 False
2020-05-02 08:00:00 90 False
2020-05-02 08:01:00 100 False
2020-05-02 08:02:00 88 False

Ich möchte jetzt von dieser Ausgabe nur die letzte Zeile und die zweite Spalte ("88") in eine Variable abfüllen.

Wie kann ich diese Zeile/Spalte in meinem Script auswählen? Ich habe nur fast wissenschaftliche Abhandlungen dafür gefunden. Ich bin sicher es gibt eine einfachere Lösung, die sich noch vor mir versteckt.. :(

Danke für eure Hilfe.

Gruss
ForelliX
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Da du ein Pandas DataFrame erhältst, kannst du entweder mit dem Namen der Spalte darauf zugreifen, oder über `iloc`.
Den Namen kannst du ablesen, wenn du die mal das DataFrame ausgeben lässt. Dann

Code: Alles auswählen

print(result["Spaltenname"])
Über iloc:

Code: Alles auswählen

print(result.iloc[:, spaltenindex])
ForelliX
User
Beiträge: 8
Registriert: Samstag 2. Mai 2020, 08:58

Vielen Dank, mit iloc funktioniert es problemlos!

Hier das Script, dass für mich passt:

Code: Alles auswählen

#REQUIREMENTS:
#python.exe -m pip install --upgrade pip
#pip install pytrends
#pip install pandas

import pandas as pd                        
from pytrends.request import TrendReq

pytrends = TrendReq(hl='de-CH', tz=48)
kw_list = ["Bern"]

pytrends.build_payload(kw_list, cat=0, timeframe='now 1-H', geo='', gprop='')
result = pytrends.interest_over_time()

result = result.iloc[58, 0]
result = float(result)

print(result)
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ForelliX: Der `pandas`-Import wird nicht verwendet, sollte da also nicht stehen. Und auch das ``pip install pandas`` dürfte nicht nötig sein wenn das eine Abhängigkeit von `pytrends` ist. `lxml` und `requests` werden in den Kommentaren ja auch nicht extra erwähnt.

Defaultwerte braucht man nicht übergeben, darum gibt es die ja.

Alles was als Rückgabewert eines Aufrufs geliefert wird `result` zu nennen und damit drei verschiedene Werte mit verschiedenen Typen an den gleichen Namen zu binden ist verwirrend. Man muss auch nicht jedes Zwischenergebnis an einen Namen binden.

Die hart kodierte 58 ist ein bisschen sehr magisch und fehleranfällig. Du willst dort den letzten Wert in der Spalte. Was ist wenn die Spalte mal mehr oder weniger als 58 Werte enthält?

Code: Alles auswählen

#!/usr/bin/env python3
#
# REQUIREMENTS:
# python.exe -m pip install --upgrade pip
# pip install pytrends
#
from pytrends.request import TrendReq


def main():
    pytrends = TrendReq(hl="de-CH", tz=48)
    pytrends.build_payload(["Bern"], timeframe="now 1-H")
    print(float(pytrends.interest_over_time().iloc[-1, 0]))


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten