我有以下資料集。
details
美國 [{'country': 'USA', 'city': 'NYC'}]
印度 [{'country': '印度', '城市': 'Mumbai'}]
加拿大 [{'country': '加拿大', '城市': 'VC'}] 。
我需要創建一個名為city的新列。我正在嘗試下面的代碼片段,但發現一個TypeError。
df['details'] = df['details'] 。 str.strip('[] ')
df['city'] = df['details'].map(lambda x: x['city'] )
df
---------------------------------------------------------------------------
TypeError 回溯(最近一次呼叫的最后一次)。
<ipython-input-38-3f4a312e7420> in < module>
1 df['details'] = df['details'].str.strip('[] ' )
----> 2 df['city'] = df['details'] 。 map(lambda x: x['city'])
3 df
/opt/anaconda3/lib/python3.8/site-packages/pandas/core/series.py in map(self, arg, na_action)
3907 dtype: 物件。
3908 ""
-> 3909 new_values = super()._map_values(arg, na_action=na_action)
3910 return self._constructor(new_values, index=self.index).__finalize__(
3911 self, method="map"
/opt/anaconda3/lib/python3.8/Site-packages/pandas/core/base.py in _map_values(self, mapper, na_action)
935
936 # mapper是一個函式
--> 937 new_values = map_f(values, mapper)
938
939 回傳new_values
pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()
<ipython-input-38-3f4a312e7420> in <lambda> (x)
1 df['詳情'] = df['詳情'].str.strip('[]')
----> 2 df['城市'] = df['細節'].map(lambda x: x['城市'))
3 df
TypeError: 字串指數必須是整數
我覺得我所面臨的問題是資料型別的問題。什么是最理想的方式呢?
任何建議都會被采納。
如果有任何建議,我們將不勝感激。謝謝!
uj5u.com熱心網友回復:
details列的資料型別是str型別,而不是dict型別。這里需要做的是,details列首先需要通過json.load進行決議,然后你可以通過city鍵獲得其值。
你需要將單引號替換為雙引號,這樣才能發揮作用。
在 [5]: df["details"] 。 apply(lambda x: json.load(x.replace("'", '")) ["city"]
輸出[5]。
0 NYC
名稱:詳情,dtype。object````。
uj5u.com熱心網友回復:
試試下面的代碼
展開串列,然后嘗試訪問城市。df['city'] = df['details'] 。 explode().map(lambda x: x['city'] )
不要使用:df['details'] = df['details'].str.strip('[]')/code>
而是使用[explode()],如上述代碼所示
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/307851.html
標籤:
