--Umgebung --macOS Catalina Version 10.15.7 - Python 3.8.5 - pandas 1.1.3
Die Beispieldaten sind solche Daten, die aus CSV gelesen wurden. Konzentrieren Sie sich auf die Spalte [ID] dieser Daten und probieren Sie verschiedene eindeutige Zeilen aus.
if __name__ == '__main__':
df = pandas.read_csv('CSV.csv')
print(df)
#ID Datum Start Ende
# 0 20.0 10/14 9:00 18:00
# 1 16.0 10/15 10:00 19:00
# 2 39.0 10/16 11:00 20:00
# 3 NaN 10/17 12:00 21:00
# 4 47.0 10/18 20:00 22:00
# 5 29.0 10/19 11:00 12:00
# 6 62.0 10/20 15:00 17:00
# 7 NaN 10/21 16:00 18:00
# 8 16.0 10/22 17:00 19:00
# 9 3.0 10/23 18:00 20:00
# 10 16.0 10/24 19:00 21:00
# 11 20.0 10/25 20:00 21:00
Linie Nummer |
ID | Datum | ... | [ID]Doppelte Spalten しているLinie |
---|---|---|---|---|
0 | 20.0 | 10/14 | ... | o |
1 | 16.0 | 10/15 | ... | o |
2 | 39.0 | 10/16 | ... | |
3 | NaN | 10/17 | ... | o |
4 | 47.0 | 10/18 | ... | |
5 | 29.0 | 10/19 | ... | |
6 | 62.0 | 10/20 | ... | |
7 | NaN | 10/21 | ... | o |
8 | 16.0 | 10/22 | ... | o |
9 | 3.0 | 10/23 | ... | |
10 | 16.0 | 10/24 | ... | o |
11 | 20.0 | 10/25 | ... | o |
--Referenz: Zählen Sie die Anzahl und Häufigkeit (Anzahl der Vorkommen) eindeutiger Elemente in Pandas | note.nkmk.me
#Bei Einbeziehung von NaN
print(df.nunique(dropna=False)['ID'])
# 8
#Wenn NaN ausgeschlossen ist
print(df.nunique()['ID'])
# 7
--Referenz - pandas.DataFrame.value_counts — pandas 1.1.3 documentation - pandas.DataFrame.groupby — pandas 1.1.3 documentation
der Unterschied | groupby | value_counts | Bemerkungen |
---|---|---|---|
Spaltenüberschrift | Ja | Keiner | |
Sortieren | Spaltenwert | Frequenz | sort=Bei der Einstellung "Falsch" ist die Reihenfolge dieselbe |
#Bei Einbeziehung von NaN
print(df.groupby('ID', dropna=False).size())
# ID
# 3.0 1
# 16.0 3
# 20.0 2
# 29.0 1
# 39.0 1
# 47.0 1
# 62.0 1
# NaN 2
# dtype: int64
print(df['ID'].value_counts(dropna=False))
# 16.0 3
# NaN 2
# 20.0 2
# 3.0 1
# 62.0 1
# 29.0 1
# 47.0 1
# 39.0 1
# Name: ID, dtype: int64
#Wenn NaN ausgeschlossen ist
print(df.groupby('ID', sort=False).size())
print(df['ID'].value_counts(sort=False))
# 20.0 2
# 16.0 3
# 39.0 1
# 47.0 1
# 29.0 1
# 62.0 1
# 3.0 1
# Name: ID, dtype: int64
#Bei Einbeziehung von NaN
val_con = df.groupby('ID', dropna=False).size()
print(val_con[val_con >= 2])
# ID
# 16.0 3
# 20.0 2
# NaN 2
# dtype: int64
#Wenn NaN ausgeschlossen ist
val_con = df['ID'].value_counts()
print(val_con[val_con >= 2])
# 16.0 3
# 20.0 2
# Name: ID, dtype: int64
--Referenz - pandas.DataFrame.duplicated — pandas 1.1.3 documentation
#Bei Einbeziehung von NaN
print(df.duplicated(subset=['ID']))
# 0 False
# 1 False
# 2 False
# 3 False
# 4 False
# 5 False
# 6 False
# 7 True
# 8 True
# 9 False
# 10 True
# 11 True
# dtype: bool
#Wenn NaN ausgeschlossen ist
print(df.dropna(subset=['ID']).duplicated(subset=['ID']))
# 0 False
# 1 False
# 2 False
# 4 False
# 5 False
# 6 False
# 8 True
# 9 False
# 10 True
# 11 True
# dtype: bool
duplicated
ist standardmäßig False
für die erste doppelte Zeile ( keep = 'first'
).
Abhängig von dem für keep angegebenen Wert ändert sich, welcher Teil der doppelten Zeile zu "False" wird.
Wert von behalten | ID | keep='first' (Standard) |
keep='last' | keep=False |
---|---|---|---|---|
0 | 20 | False | True | True |
1 | 16 | False | True | True |
2 | False | False | False | |
3 | NaN | False | True | True |
4 | False | False | False | |
5 | False | False | False | |
6 | False | False | False | |
7 | NaN | True | False | True |
8 | 16 | True | True | True |
9 | False | False | False | |
10 | 16 | True | False | True |
11 | 20 | True | False | True |
# df.shape[0]Sie können alle Fälle mit bekommen
if df.shape[0] == df.nunique()['ID']:
print('ID-Spaltenwerte sind eindeutig')
else:
print('ID-Spalte ist nicht eindeutig')
#Bei Einbeziehung von NaN
print(df[df.duplicated(subset=['ID'])])
#ID Datum Start Ende
# 0 20.0 10/14 9:00 18:00
# 1 16.0 10/15 10:00 19:00
# 3 NaN 10/17 12:00 21:00
# 7 NaN 10/21 16:00 18:00
# 8 16.0 10/22 17:00 19:00
# 10 16.0 10/24 19:00 21:00
# 11 20.0 10/25 20:00 21:00
#Wenn NaN ausgeschlossen ist
df_dropna = df.dropna(subset=['ID'])
print(df_dropna[df_dropna.duplicated(subset=['ID'], keep=False)])
#ID Datum Start Ende
# 0 20.0 10/14 9:00 18:00
# 1 16.0 10/15 10:00 19:00
# 8 16.0 10/22 17:00 19:00
# 10 16.0 10/24 19:00 21:00
# 11 20.0 10/25 20:00 21:00