Moment....
Ja, danke. Funktioniert wunderbar.
csv einlesen in array of tuples und sortieren nach tupel-Element
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Krischu: Das `apply()` zum runden ist unnötig umständlich weil `Series`-Objekte eine `round()`-Methode haben.
Am Anfang Spalten mit Dummywerten belegen die nie irgendwo verwendet werden macht keinen Sinn.
Auch bei "Paar" würde ich kein `apply()` verwenden:
Wobei das wie beim runden eher etwas kosmetisches ist was die Ausgabe betrifft. Sollte der Wahrheitswert von dieser Spalte noch für irgend etwas benötigt werden, dann würde ich das erst einmal als Spalte mit Wahrheitswerten belassen.
Am Anfang Spalten mit Dummywerten belegen die nie irgendwo verwendet werden macht keinen Sinn.
Auch bei "Paar" würde ich kein `apply()` verwenden:
Code: Alles auswählen
ds["Paar"] = ((ds["dL [%]"] < 0.2) & (ds["dR [%]"] < 2)).map({True: "P", False: "-"})
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Das funktioniert bei mir gar nicht.
Das funktioniert:
Das funktioniert:
Code: Alles auswählen
print(ds.to_string(formatters={'dL [%]': "{:.2%}".format, 'dR [%]': "{:.2%}".format}))
Bei mir funktioniert keine der zuletzt vorgeschlagenen .2%-Ausgaben.
Derzeitiger Stand:
(Anm.: die "paar"-Funktion ist wegen der Einstellung auf %-Werte jetzt zu grob eingestellt, ist auch im Moment nicht wichtig. Den Tip mit dem Vorhalten der "Wahrheitswerte" werde ich noch übernehmen.)
Derzeitiger Stand:
Code: Alles auswählen
import pandas as pd
def fun(col1,col2):
return abs(2*(col2-col1)/(col2+col1))
def paar(row):
return "P" if row['dL [%]'] < 0.002 and row['dR [%]'] < .002 else "-"
df = pd.read_csv('neue_messung.csv',names=['ID','L [µH]','R [Ω]'],header=None)
#print(df)
#df['dL [%]'] = 0
#df['dR [%]'] = 0
#df['Paar']=""
#
# ds = sorted df
ds = df.sort_values(by='L [µH]')
ds['dL [%]']=fun(ds['L [µH]'],ds['L [µH]'].shift(1))
ds['dR [%]']=fun(ds['R [Ω]'],ds['R [Ω]'].shift(1))
#ds['dL [%]']=ds['dL [%]'].apply(lambda x:round(x,2))
#ds['dR [%]']=ds['dR [%]'].apply(lambda x:round(x,2))
#ds['Paar'] = ds.apply(paar, axis=1)
ds["Paar"] = ((ds["dL [%]"] < 0.2) & (ds["dR [%]"] < 2)).map({True: "P", False: "-"})
#ds.style.format({'dL [%]': "{:.2%}",'dR [%]': "{:.2%}"})
ds.to_string(formatters={'dL [%]': "{:.2%}".format, 'dR [%]': "{:.2%}".format})
val= ds['dL [%]'][1]
print (val)
ds
-------------------------------
ID L [µH] R [Ω] dL [%] dR [%] Paar
9 81 867.38 12.91 NaN NaN -
0 52 872.72 12.66 0.006138 0.019554 P
32 40 872.87 12.60 0.000172 0.004751 P
8 29 874.51 12.43 0.001877 0.013584 P
34 86 874.54 12.52 0.000034 0.007214 P
4 19 874.97 12.71 0.000492 0.015061 P
27 61 876.03 12.43 0.001211 0.022275 P
25 89 876.23 12.70 0.000228 0.021488 P
17 32 877.12 12.41 0.001015 0.023098 P
16 80 877.42 12.55 0.000342 0.011218 P
37 79 877.51 12.48 0.000103 0.005593 P
33 38 878.59 12.43 0.001230 0.004014 P
39 59 878.70 12.39 0.000125 0.003223 P
14 33 878.71 12.57 0.000011 0.014423 P
--
Grüße
Christoph
Grüße
Christoph
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Krischu: Die `to_string()`-Methode wandelt den DataFrame in eine Zeichenkette. Man muss mit der Zeichenkette dann auch schon irgendetwas machen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Danke. Ja, hatte ich übersehen. Hatte das Beispiel nur aus einem Stackoverflow-Artikel rausgeholt.__blackjack__ hat geschrieben: Montag 19. Oktober 2020, 22:15 @Krischu: Die `to_string()`-Methode wandelt den DataFrame in eine Zeichenkette. Man muss mit der Zeichenkette dann auch schon irgendetwas machen.
Hier noch mal ein etwas eingedampfteres Beispiel:
Code: Alles auswählen
import pandas as pd
def fun(col1,col2):
return abs(2*(col2-col1)/(col2+col1))
def paar(row):
return "P" if row['dL'] < 0.002 and row['dR'] < .002 else "-"
#df = pd.read_csv('neue_messung.csv',names=['ID','L [µH]','R [Ω]'],header=None)
data=[(52,872.72,12.66),
(2,883.16,12.46),
(35,881.20,12.50),
(47,881.92,12.50),
(19,874.97,12.71)]
df = pd.DataFrame(data,columns=['ID','L','R'])
ds = df.sort_values(by='L')
ds['dL']=fun(ds['L'],ds['L'].shift(1))
ds['dR']=fun(ds['R'],ds['R'].shift(1))
ds["Paar"] = ((ds['dL'] < 0.2) & (ds['dR'] < 2)).map({True: "P", False: "-"})
ds.style.format({'dL': "{:.2%}",'dR': "{:.2%}"})
print(ds)
ds
-----------------------------
ID L R dL dR Paar
0 52 872.72 12.66 NaN NaN -
4 19 874.97 12.71 0.002575 0.003942 P
2 35 881.20 12.50 0.007095 0.016660 P
3 47 881.92 12.50 0.000817 0.000000 P
1 2 883.16 12.46 0.001405 0.003205 P
ID L R dL dR Paar
0 52 872.72 12.66 NaN NaN -
4 19 874.97 12.71 0.002575 0.003942 P
2 35 881.20 12.50 0.007095 0.016660 P
3 47 881.92 12.50 0.000817 0.000000 P
1 2 883.16 12.46 0.001405 0.003205 P
--
Grüße
Christoph
Grüße
Christoph