Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.python > #5496
| From | Peter Otten <__peter__@web.de> |
|---|---|
| Newsgroups | de.comp.lang.python |
| Subject | Re: [Python-de] Anfaengerfrage: Dataframe - Zeilenmittel - Spaltenmittel |
| Date | 2019-06-19 22:35 +0200 |
| Organization | None |
| Message-ID | <mailman.155.1560976545.21674.python-de@python.org> (permalink) |
| References | <1825444.o0KX4FVeTt@host> <9390763f-1e2a-fb62-50ed-6b776764aec9@goebel-consult.de> <8217725.EGQyf2vfZd@host> <2233175.VqSBi401Pp@palindrom> |
eilfh wrote:
> Am Mittwoch, 19. Juni 2019, 14:08:33 CEST schrieb Hartmut Goebel:
>> immer "i-1" verwendest, kannst Du hier
>> "range(spalten_anzahl)" verwenden. Das läuft von 0 und bis
>
>
> Danke für eure schnellen Antworten
>
> @ Hartmut:
> klappt tatsächlich,
> nur ein Verständnisproblem meinerseits :
> Indizierung fängt bei 0 an (= das sind aber die Spalten-/bzw. die
> Zeilenköpfe)
Die "Köpfe" sind nicht per Index erreichbar:
>>> df = pd.DataFrame([[1,2], [3,4], [5,6]], columns=["foo", "bar"])
>>> df.iloc[0,0]
1
Indizes einer Sequenz der Länge N laufen von 0 bis N-1,
>>> for i in range(3):
... print(i, "abc"[i])
...
0 a
1 b
2 c
negative Indizes zählen vom Ende einer Sequenz:
>>> df.iloc[-1,0]
5
>>> "abc"[-1]
'c'
>>> "abc"[-2]
'b'
>>> "abc"[-3]
'a'
> und dann aber i - 1, bzw. j - 1 --> 0 - 1 --> -1 ???
> aber Ergebnis stimmt (für dich sicher trivial!)
> (irgendwie denk man wohl
> -- auch nach vielen Jahren --
> immer noch in Turbo-Pascal-Strukturen)
In deinem Code-Beispiel hast du aber von 0 bis N-1 indiziert, nur etwas
umständlich erst mit 1...N begonnen und dann jeweils 1 abgezogen.
Auf das Endergebnis hatte das keinen Einfluss:
>>> [i-1 for i in range(1, N+1)] # du
[0, 1, 2]
>>> [i for i in range(N)] # üblich
[0, 1, 2]
> @Peter:
> df1 = df.copy()
> habe ich dankend übernommen
>
> df.as_matrix()
> FutureWarning: Method .as_matrix,
> das könnte ich aktualisieren (Use .values instead)
Möglicherweise ist meine Pandas-Version ein bisschen älter als deine ;)
> aber:
> meine DataFrames sind nicht quadratisch
> (vermutl. deshalb scheitert das)
> (hier im Testbsp.: 5 Spalten, 30 Zeilen)
> Abbruch, Fehlermitteilung:
> ValueError: Shape of passed values is (5, 30), indices imply (30, 30)
Das sollte eigentlich kein Problem sein. Hier ein vollständiges Script, mit
3 Spalten und 4 Zeilen:
$ cat tmp.py
import pandas as pd
df = pd.DataFrame(
[[1.,2.,3.], [10, 20, 30], [7, 23, 64], [6, 6, 7]],
columns=["foo", "bar", "baz"]
)
print(df)
a = df.values
b = (a.T - a.mean(axis=1)).T - a.mean(axis=0) + a.mean()
df1 = pd.DataFrame(b, columns=df)
print(df1)
Das gibt bei mir Folgendes aus:
$ python3 tmp.py
foo bar baz
0 1 2 3
1 10 20 30
2 7 23 64
3 6 6 7
[4 rows x 3 columns]
foo bar baz
0 7.916667 2.166667 -10.083333
1 -1.083333 2.166667 -1.083333
2 -15.416667 -6.166667 21.583333
3 8.583333 1.833333 -10.416667
[4 rows x 3 columns]
$
Produziert das bei dir ein Traceback (wenn ja, was genau)?
Back to de.comp.lang.python | Previous | Next | Find similar
Re: [Python-de] Anfaengerfrage: Dataframe - Zeilenmittel - Spaltenmittel Peter Otten <__peter__@web.de> - 2019-06-19 22:35 +0200
csiph-web