簡體   English   中英

Python / Pandas-使用條件從JSON更新數據框

[英]Python/Pandas - Updating dataframe from JSON with conditions

我試圖像這樣在我的數據框中添加一個新列:

df_precip_avail_rain_hourly['coordE'] = [
        item for item in data["features"] 
        if item["properties"]["cellId"] == df_precip_avail_rain_hourly.SId
    ][0]["geometry"]["coordinates"][0][0][0]

如果沒有更新熊貓,這將產生一個浮動:

[item for item in data["features"] 
 if item["properties"]["cellId"] == 38][0]["geometry"]["coordinates"][0][0][0]
#returns 10.914622377957983

但是,如果要使用它更新DF,則會收到以下錯誤:

ValueError                                Traceback (most recent call last)
<ipython-input-154-bbdf5e48ffd5> in <module>()
----> 1 df_precip_avail_rain_hourly['coordE'] = [item for item in data["features"] if (item["properties"]["cellId"] == df_precip_avail_rain_hourly.SId).bool()][0]["geometry"]["coordinates"][0][0][0]

<ipython-input-154-bbdf5e48ffd5> in <listcomp>(.0)
----> 1 df_precip_avail_rain_hourly['coordE'] = [item for item in data["features"] if (item["properties"]["cellId"] == df_precip_avail_rain_hourly.SId).bool()][0]["geometry"]["coordinates"][0][0][0]

/usr/local/lib/python3.5/dist-packages/pandas/core/generic.py in bool(self)
    908                              "{0}".format(self.__class__.__name__))
    909 
--> 910         self.__nonzero__()
    911 
    912     def __abs__(self):

/usr/local/lib/python3.5/dist-packages/pandas/core/generic.py in __nonzero__(self)
    890         raise ValueError("The truth value of a {0} is ambiguous. "
    891                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 892                          .format(self.__class__.__name__))
    893 
    894     __bool__ = __nonzero__

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我試圖使用.bool()像:

df_precip_avail_rain_hourly['coordE'] = [
        item for item in data["features"] 
        if (item["properties"]["cellId"] == df_precip_avail_rain_hourly.SId).bool()
    ][0]["geometry"]["coordinates"][0][0][0]

但是,出現相同的錯誤。 我該怎么解決? 謝謝!

編輯 df_precip_avail_rain_hourly具有以下數據:

index SId
1     38
2     38
3     46

data是帶有以下元素的JSON:

{'geometry': {'coordinates': [[[10.914622377957983, 45.682007076150505],
    [10.927456267537572, 45.68179119797432],
    [10.927147329501077, 45.672795442796335],
    [10.914315493899755, 45.67301125363092],
    [10.914622377957983, 45.682007076150505]]],
  'type': 'Polygon'},
 'id': 0,
 'properties': {'cellId': 38},
 'type': 'Feature'}

由此,我想

index SId coordE
1     38  10.914622377957983
2     38  10.914622377957983
3     46  11.995422377959684

等等

熊貓不了解如何評估您的代碼這一行:

if item["properties"]["cellId"] == df_precip_avail_rain_hourly.SId

它正在嘗試將單個值(看起來像)與整個系列SId 將此傳遞給if會引起歧義。

更好的方法是將data轉換為數據幀,然后合並數據幀:

df_coords = pd.DataFrame(
    [[item['properties']['cellId'], item['geometry']['coordinates'][0][0][0]] 
     for item in data], columns=['SId','coordE'])

df_precip_avail_rain_hourly.merge(df_coords, how='left', on='SId')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM