Zusammenführen von Listen und Export als csv

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
uschmidt
User
Beiträge: 14
Registriert: Sonntag 9. April 2017, 15:00

Hallo Python Experten,
ich bin leider absoluter Anfänger was Python angeht und komme trotz Internetrecherche nicht weiter. Für ein Uniprojekt müssen verschiedene Werte in einer .csv-Datei berechnet werden. Mein Code sieht bisher wie folgt aus

Code: Alles auswählen

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

tweets=pd.read_csv('numTweets.csv', names=['Zeitstempel','Waehrung','AnzahlTweets']) 
Sum=tweets.groupby('Waehrung').AnzahlTweets.sum()
Mean=tweets.groupby('Waehrung').AnzahlTweets.mean()
Std=tweets.groupby('Waehrung').AnzahlTweets.std()
Min=tweets.groupby('Waehrung').AnzahlTweets.min()
Max=tweets.groupby('Waehrung').AnzahlTweets.max()
stattweets=[Sum,Mean,Std,Min,Max]
Lasse ich mir nun stattweets anzeigen, bekomme ich mehrere Listen hintereinander. Ich würde diese dieses Listen jedoch gerne über die Variable 'Waehrung' zusammenführen sodass ich am Ende eine Liste bekomme, in der mir in einer Zeile für jede Währung Sum, Mean, Std, Min und Max angezeigt werden. Wenn möglich, sollte diese direkt in eine neue .csv-Datei überführt werden. Ist dies überhaupt möglich und wenn ja, wie? :K

Danke schon mal im Voraus!
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

pandas kennt eine Methode `describe()`, die dir direkt eine ganze Reihe von Statistiken für einen DataFrame ausgibt.

Ansonsten wäre es IMHO hilfreich, wenn du ein paar Beispielzeilen aus der CSV Datei zeigen könntest, damit man sieht, wie die Ausgangsdaten aussehen. Wenn du realen Daten hier nicht zeigen kannst, dann erfinde halt ein paar Daten. Wichtig ist nur, dass die Struktur gleich ist.

Gruß, noisefloor
uschmidt
User
Beiträge: 14
Registriert: Sonntag 9. April 2017, 15:00

Die Ursprungsdaten sehen wie folgt aus:
  • Zeitstempel Waehrung AnzahlTweets
    0 2017-02-11 20:21:10.944022 ADCN 0
    1 2017-02-11 20:22:11.546657 ADZ 0
    2 2017-02-11 20:23:12.188070 AEON Coin 0
    3 2017-02-11 20:24:12.705810 AGRS 0
    4 2017-02-11 20:25:13.243329 AMBER 0
Pro Waehrung gibt es mehrere Zeitstempel, also mehrere Zeilen. Mein Ziel ist es, eine .csv-Datei zu erstellen, die nach Waehrung gruppiert ist und bei der ich pro Waehrung jeweils Mittelwert, Minimum, Maximum, Summe und die Standardabweichung der Tweets habe.

Danke schon mal!
Benutzeravatar
Natrix natrix
User
Beiträge: 16
Registriert: Mittwoch 29. März 2017, 09:16

Hallo uschmid,

so ganz verstanden habe ich Deine Anforderungen noch nicht...

Zusammenführen von Dateien klappt in der Tat mit Pandas recht einfach, die DataFrames sind wie Tabellen mit verschiedenen Datentypen und eignen sich gut für die Analyse von Daten.
Describe gibt wie schon geschrieben die die wichtigsten Informationen in einer Datenkarte kurz aus.
df.describe()

Du kannst auch über einzelnen Spalten gruppieren
df.groupby("Spalte xy").describe()

Pandas kann auch csvs lesen und schreiben:
lesen: df = pd.read_csv
schreiben: df.to_csv

Doku hier auf Deutsch:
http://www.python-kurs.eu/pandas.php

VG
uschmidt
User
Beiträge: 14
Registriert: Sonntag 9. April 2017, 15:00

Hallo Natrix,

in meinen Ursprungsdaten gibt es für jede Waehrung mehrere Zeitstempel, also mehrere Zeilen:
  • Zeitstempel Waehrung AnzahlTweets
    0 2017-02-11 20:21:10.944022 ADCN 0
    1 2017-02-11 20:22:11.546657 ADZ 0
    2 2017-02-11 20:23:12.188070 AEON Coin 0
    3 2017-02-11 20:24:12.705810 AGRS 0
    4 2017-02-11 20:25:13.243329 AMBER 0

Ich möchte allerdings für jeden Waehrung nur noch eine Zeile(die Liste also nach Waehrung gruppiert). Außerdem möchte ich für jeden Waehrung die Summe, den Mittelwert, die Standardabweichung, das Minimum und das Maximum aus der Spalte 'AnzahlTweets' berechnen.

Zum Schluss sollte meine Liste so aussehen:

Waehrung Summe Mittelwert Std Min Max
ADCN 5 0,03 0,2 0 2
ADZ 17 0,10 0,38 0 2
...

Mein Problem ist nicht, die Daten in eine .csv-Datei zu schreiben, sondern vor allem die Tabelle so zu bauen, dass jede Berechnung in einer Spalte ist.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

sagen wir mal, das sind deine Ausgangsdaten:

Code: Alles auswählen

2017-02-11 20:21:10.944022;ADCN;2
2017-02-11 20:22:11.546657;ADZ;5
2017-02-10 20:22:11.546657;ADZ;10
2017-02-11 20:23:12.188070;AEON;4
2017-02-12 20:21:10.944022;ADCN;4
Dann würde ich das so machen:

[codebox=pycon file=Unbenannt.txt]>>> import pandas as pd
>>> df=pd.read_csv('text.csv', names=['timestamp','currency','tweet_count'], sep=';')
>>> for item in df.currency.unique():
... mask = df['currency'].map(lambda x: x==item)
... sum_value = df[mask].tweet_count.sum()
... mean_value = df[mask].tweet_count.mean()
... std_value = df[mask].tweet_count.std()
... print(item, sum_value, mean_value, std_value)
...
ADCN 6 3.0 1.41421356237
ADZ 15 7.5 3.53553390593
AEON 4 4.0 nan[/code]

Um das ganze in eine CSV-Datei zu schreiben musst du dann "nur" noch das csv-Modul aus der Standardbiblithek importieren, dir eine CSV-Datei zum Schreiben anlegen und dann da, wo das `print(...)` steht, die Daten als Zeile in die CSV-Datei schreiben.

Gruß, noisefloor
uschmidt
User
Beiträge: 14
Registriert: Sonntag 9. April 2017, 15:00

Hat funktioniert!

BESTEN DANK!!!
Antworten