Missing Data
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 20/100
Rechercherichtung
Beginne damit, die vier Diskussionsthemen in diesem Issue zu lesen, und prüfe anschließend das verknüpfte pandas-Issue sowie die referenzierte Dokumentation zur Kleene-Logik. Für den Abschluss wäre eine abgestimmte Spezifikation für Benennung, nullable Typen, arithmetische und logische Semantik sowie skalare fehlende Werte erforderlich; konkrete Implementierungsdateien oder Tests werden hier nicht genannt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
This issues is dedicated to discussing the large topic of "missing" data.
First, a bit on names. I think we can reasonably choose between NA, null, or missing as a general name for "missing" values. We'd use that to inform decisions on method names like DataFrame.isna() vs. DataFrame.isnull() vs. ...
Pandas favors NA, databases might favor null, Julia uses missing. I don't have a strong opinion here.
Some topics of discussion:
- data types should be nullable
I think we'd like that the introduction of missing data should not fundamentally change the dtype of a column.
This is not the case with pandas:
In [5]: df1 = pd.DataFrame({"A": ['a', 'b'], "B": [1, 2]})
In [6]: df2 = pd.DataFrame({"A": ['a', 'c'], "C": [3, 4]})
In [7]: df1.dtypes
Out[7]:
A object
B int64
dtype: object
In [8]: pd.merge(df1, df2, on="A", how="outer")
Out[8]:
A B C
0 a 1.0 3.0
1 b 2.0 NaN
2 c NaN 4.0
In [9]: _.dtypes
Out[9]:
A object
B float64
C float64
In pandas, for int-dtype data NaN is used as the missing value indicator. NaN is a float, and so the column is cast to float64 dtype.
Ideally Out[9] would preserve the int dtype for B and C. At this moment, I don't have a strong opinion on whether the dtype for B should be a plain int64, or something like a Union[int64, NA].
- Semantics in arithmetic and comparison operations
In general, missing values should propagate in arithmetic and comparison operations (using <NA> as a marker for a missing value)`.
>>> df1 = DataFrame({"A": [1, None, 3]})
>>> df1 + 1
A
0 2
1 <NA>
2 4
>>> df1 == 1
A
0 True
1 <NA>
2 False
There might be a few exceptions. For example 0 ** NA might be 1 rather than NA, since it doesn't matter exactly what value NA takes on.
- Semantics in logical operations
For boolean logical operations (and, or, xor), libraries should implement three-value or Kleene Logic. The pandas docs has a table
The short-version is that the result should be NA if it depends on whether the NA operand being True or False. For example, True | NA is True, since it doesn't matter whether that NA is "really" True or False.
- The need for a scalar NA?
Libraries might need to implement a scalar NA value, but I'm not sure. As a user, you would get this from indexing to get a scalar, or in an operation that produces an NA result.
>>> df = pd.DataFrame({"A": [None]})
>>> df.iloc[0, 0] # no comment on the indexing API
<NA>
What semantics should this scalar NA have? In particular, should it be typed? This is something we've struggled with in recent versions of pandas. There's a desire to preserve a property along the lines of the following
(arr1 + arr2)[0].dtype == (arr1 + arr2[0]).dtype
Where the first value in the second array is NA. If you have a single NA without any dtype, you can't implement that property.
There's a long thread on this at https://github.com/pandas-dev/pandas/issues/28095.
- Vorherrschende Sprache
- Python
- Sterne
- 106
- Forks
- 22
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus data-apis/dataframe-api
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
data-apis/dataframe-api#363 · 1 Kommentar · 8 Reaktionen ·
-
API design
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
data-apis/dataframe-api#356 · 1 Kommentar ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 25/100
data-apis/dataframe-api#355 ·
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
data-apis/dataframe-api#352 ·
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
data-apis/dataframe-api#351 ·
Alle Issues in data-apis/dataframe-api
Ähnliche Issues
-
Context/namespace resources fail in-cluster: "Invalid kube-config file. No configuration found."Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
-
bug documentation
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
awslabs/visual-asset-management-system#880 ·
Maintainer antworten meist innerhalb von 1 Tag
-
netbox status: needs owner type: documentation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
netbox-community/netbox#23533 ·
Maintainer antworten meist innerhalb von 1 Tag
-
app: scripts status: backlog type: documentation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
netbox-community/netbox-scripts#68 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 91/100
marin-community/marin#10765 ·
Maintainer antworten meist innerhalb von 1 Tag