Ich habe einen Datenrahmen (df) wie folgt aus:Pandas DataFrame.apply: Erstellen Sie neue Spalte mit Daten aus zwei Spalten
PointID Time geojson
---- ---- ----
36F 2016-04-01T03:52:30 {'type': 'Point', 'coordinates': [3.961389, 43.123]}
36G 2016-04-01T03:52:50 {'type': 'Point', 'coordinates': [3.543234, 43.789]}
Die GeoJSON Spaltendaten in GeoJSON-Format enthält (esentially, ein Python dict).
Ich möchte eine neue Spalte im GeoJSON-Format erstellen, die die Zeitkoordinate enthält. Mit anderen Worten, ich möchte die Zeitinformation in die geoJSON-Info einfügen.
Für einen einzelnen Wert, kann ich erfolgreich tun: related question
Aber jetzt ich:
oldjson = df.iloc[0]['geojson']
newjson = [df['coordinates'][0], df['coordinates'][1], df.iloc[0]['time'] ]
für einen einzelnen Parameter, I dataFrame.apply in Kombination mit Lambda (dank SO erfolgreich eingesetzt habe zwei Parameter, und ich möchte es auf dem ganzen DataFrame verwenden. Da ich nicht mit der .apply-Syntax und Lambda vertraut bin, weiß ich nicht, ob das überhaupt möglich ist. Ich würde gerne so etwas machen:
def inject_time(geojson, time):
"""
Injects Time dimension into geoJSON coordinates. Expects a dict in geojson POINT format.
"""
geojson['coordinates'] = [geojson['coordinates'][0], geojson['coordinates'][1], time]
return geojson
df["newcolumn"] = df["geojson"].apply(lambda x: inject_time(x, df['time'])))
... aber das funktioniert nicht, weil die Funktion die ganze Serie injizieren würde.
EDIT: dachte ich, dass das Format der timestamped GeoJSON dies etwas sein soll:
TimestampedGeoJson({
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [[-70,-25],[-70,35],[70,35]],
},
"properties": {
"times": [1435708800000, 1435795200000, 1435881600000]
}
}
]
})
das Zeitelement im Eigenschaftenelement ist also, aber das Problem nicht viel ändern.
Können Sie Ihre Datenrahmen aktualisieren Koordinaten hinzufügen? – Tbaki
@ Ulu83 - Hmmm, was ist die gewünschte Ausgabe von Ihren Eingabedaten? – jezrael