Создать словарь со списком кортежей - python - PullRequest
0 голосов
/ 12 октября 2018

У меня есть фрейм данных со столбцом, который содержит координаты, хранящиеся в виде кортежей.

enter image description here

Мне нужно создать словарь, анализируя каждое значениепара кортежей и передать ему словарь.Вот код:

return {

    "data": [
            {
                "type": "scattermapbox",
                "lat": ,
                "lon": ,
                #"text": ,
                "mode": "markers",
                "marker": {
                "size": 3,
                "opacity": 1.0
            }
        }

      for i, row in Comp_data.iterrows() 

    ],
}

Я пытаюсь найти способ первой итерации по каждой паре кортежей в столбце и присвоить ей значение в словаре.

for i, row in Comp_data.iterrows():

    coords = row['HomeLocation']

    dict1 = {
                "type": "scattermapbox",
                "lat": coords[0],
                "lon": coords[1],
                "mode": "markers",

            }

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Может быть:

return {
    "data": [
            {
                "type": "scattermapbox",
                "lat": hl[0][0],
                "lon": hl[0][1],
                "mode": "markers",
                "marker": {
                "size": 3,
                "opacity": 1.0
            }
        }
      for hl in Comp_data.loc[:, ['HomeLocation']].values
    ]
}
0 голосов
/ 12 октября 2018

Альтернативный способ - сначала сделать координаты в отдельные столбцы.Затем конвертируйте в список словарей.Затем обновите каждый словарь другими свойствами, которые не меняются в зависимости от строки.

df = pd.DataFrame({
    "Transportation": ["Drive alone", "Work from home", "Ride share"], 
    "HomeLocation": [(37.7, -121), (37.0, -125),  (39, 135)],
    "WorkLocation": [(47.7, -221), (47.0, -225), (49, 235)]
})
data = df["HomeLocation"].apply(pd.Series).to_dict('records')
other_properties = {
    "type": "scattermapbox",
    "mode": "markers",
    "marker": {
        "size": 3,
        "opacity": 1.0
    }
}
for dict in data:
    dict.update(other_properties)
return {"data": data}
0 голосов
/ 12 октября 2018

Я бы немного изменил функцию:

     x            hl            wl
0   da  (37.7, -121)  (47.7, -221)
1  wfh  (37.0, -125)  (47.0, -225)
2  rsh     (39, 135)     (49, 235)


def x(df):
    for i, row in df.iterrows():
        lat, lon = row['hl']
        yield  {
            "type": "scattermapbox",
            "lat":  lat,
            "lon":  lon,
            #"text": ,
            "mode": "markers",
            "marker": {
            "size": 3,
            "opacity": 1.0
        }
    }

print([s for s in x(df)])

[
  {
    "type": "scattermapbox",
    "lat": 37.7,
    "lon": -121,
    "mode": "markers",
    "marker": {
    "size": 3,
    "opacity": 1.0
   }
  },
  {
    "type": "scattermapbox",
    "lat": 37.0,
    "lon": -125,
    "mode": "markers",
    "marker": {
    "size": 3,
    "opacity": 1.0
  }
 },
 {
   "type": "scattermapbox",
   "lat": 39,
   "lon": 135,
   "mode": "markers",
   "marker": {
     "size": 3,
     "opacity": 1.0
     }
    }
  ]

Или в вашем коде:

 ...
 retvalue = []
 for i, row in df.iterrows():
    lat, lon = row['hl']
    retvalue.append({
            "type": "scattermapbox",
            "lat":  lat,
            "lon":  lon,
            #"text": ,
            "mode": "markers",
            "marker": {
            "size": 3,
            "opacity": 1.0
        })
 return retvalue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...