将熊猫系列的序列化json转变为熊猫系列dicts系列

发布于 2025-02-09 04:26:47 字数 2483 浏览 1 评论 0 原文

我有以下熊猫系列:

>>>df.A.head()

0    {"Date_": "2022-06-01T01:00:00+05:30", "submit...
1    {"Growth": [{"textField": "", "Change_Size": "...
2    {"submit": true, "HSI_Tag": "xyz...
3    {"submit": true, "HSI_Tag": "xyz...
4    {"submit": true, "roleList": "xy...
Name: A, dtype: object

该系列中的每个项目都是序列化的JSON 物品。我想将每个项目变成词典。我正在尝试执行以下操作,但是我会遇到错误:

for i in range(len(df.A)):
    df.A.iloc[i] = json.loads(df.A.iloc[i])

错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-27-9b4e8d4e6d76> in <module>
      1 for i in range(len(df.A)):
----> 2     df.A.iloc[i] = json.loads(df.A.iloc[i])

C:\ANACONDA3\lib\site-packages\pandas\core\indexing.py in __setitem__(self, key, value)
    188             key = com.apply_if_callable(key, self.obj)
    189         indexer = self._get_setitem_indexer(key)
--> 190         self._setitem_with_indexer(indexer, value)
    191
    192     def _validate_key(self, key, axis):

C:\ANACONDA3\lib\site-packages\pandas\core\indexing.py in _setitem_with_indexer(self, indexer, value)
    640                 # setting for extensionarrays that store dicts. Need to decide
    641                 # if it's worth supporting that.
--> 642                 value = self._align_series(indexer, Series(value))
    643
    644             elif isinstance(value, ABCDataFrame):

C:\ANACONDA3\lib\site-packages\pandas\core\indexing.py in _align_series(self, indexer, ser, multiindex_indexer)
    774
    775         elif is_scalar(indexer):
--> 776             ax = self.obj._get_axis(1)
    777
    778             if ser.index.equals(ax):

C:\ANACONDA3\lib\site-packages\pandas\core\generic.py in _get_axis(self, axis)
    376
    377     def _get_axis(self, axis):
--> 378         name = self._get_axis_name(axis)
    379         return getattr(self, name)
    380

C:\ANACONDA3\lib\site-packages\pandas\core\generic.py in _get_axis_name(cls, axis)
    373                 pass
    374         raise ValueError('No axis named {0} for object type {1}'
--> 375                          .format(axis, type(cls)))
    376
    377     def _get_axis(self, axis):

ValueError: No axis named 1 for object type <class 'type'>

我该如何修复?

I have the following pandas series:

>>>df.A.head()

0    {"Date_": "2022-06-01T01:00:00+05:30", "submit...
1    {"Growth": [{"textField": "", "Change_Size": "...
2    {"submit": true, "HSI_Tag": "xyz...
3    {"submit": true, "HSI_Tag": "xyz...
4    {"submit": true, "roleList": "xy...
Name: A, dtype: object

Every item in the series is a serialized JSON
item. I would like to turn every item into a dictionary. I am trying to do the following, but I get an error:

for i in range(len(df.A)):
    df.A.iloc[i] = json.loads(df.A.iloc[i])

The error:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-27-9b4e8d4e6d76> in <module>
      1 for i in range(len(df.A)):
----> 2     df.A.iloc[i] = json.loads(df.A.iloc[i])

C:\ANACONDA3\lib\site-packages\pandas\core\indexing.py in __setitem__(self, key, value)
    188             key = com.apply_if_callable(key, self.obj)
    189         indexer = self._get_setitem_indexer(key)
--> 190         self._setitem_with_indexer(indexer, value)
    191
    192     def _validate_key(self, key, axis):

C:\ANACONDA3\lib\site-packages\pandas\core\indexing.py in _setitem_with_indexer(self, indexer, value)
    640                 # setting for extensionarrays that store dicts. Need to decide
    641                 # if it's worth supporting that.
--> 642                 value = self._align_series(indexer, Series(value))
    643
    644             elif isinstance(value, ABCDataFrame):

C:\ANACONDA3\lib\site-packages\pandas\core\indexing.py in _align_series(self, indexer, ser, multiindex_indexer)
    774
    775         elif is_scalar(indexer):
--> 776             ax = self.obj._get_axis(1)
    777
    778             if ser.index.equals(ax):

C:\ANACONDA3\lib\site-packages\pandas\core\generic.py in _get_axis(self, axis)
    376
    377     def _get_axis(self, axis):
--> 378         name = self._get_axis_name(axis)
    379         return getattr(self, name)
    380

C:\ANACONDA3\lib\site-packages\pandas\core\generic.py in _get_axis_name(cls, axis)
    373                 pass
    374         raise ValueError('No axis named {0} for object type {1}'
--> 375                          .format(axis, type(cls)))
    376
    377     def _get_axis(self, axis):

ValueError: No axis named 1 for object type <class 'type'>

How can I fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

秋日私语 2025-02-16 04:26:48

我最终用 和这样的lambda:

df.A = df.A.apply(lambda x: json.loads(x))

I managed to do it eventually with apply and a lambda like this:

df.A = df.A.apply(lambda x: json.loads(x))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文