2017-05-02 3 views
0

とJSONからのデータフレームの更新:パンダアップデートがなければパイソン/パンダ - 私はこのような私のdataframに新しい列を追加しようとしている条件

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()リットルを使用しようとしましたike:

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] 

同じエラーが表示されます。これを解決するには何ができますか?ありがとうございました!

index SId 
1  38 
2  38 
3  46 

そしてdataのような要素を持つJSONです::

EDIT df_precip_avail_rain_hourlyは、データのように持って、私がしたいのです。このことから

{'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 

など

答えて

0

パンダは、どのように評価にあなたのコードのこの行を理解していません:シリーズ全体SIdに単一の値(どのように見えるか)を比較しようとしている

if item["properties"]["cellId"] == df_precip_avail_rain_hourly.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') 
+0

まあ 'df_precip_avail_rain_hourly'は' SId'という名前の列があります。現在の行の 'SId'が' item ["properties"] ["cellId"] 'と一致するとき、適切なセルの座標はその行の値になるようにデータフレームを更新したいと思います。 –

+0

は 'data'は入れ子にされた辞書かデータフレームか全く他のものですか? – James

+0

「データフレームをJSONから条件に更新する」というタイトルで述べたように、JSONです。私は明確にするために質問を更新しました。 –

関連する問題