python-3.x - 将列表转换为 pandas 数据框,其中列表包含字典

标签 python-3.x pandas list dictionary

我想将 list 转换为 pandas 数据帧,其中 list 的第一个元素是 字典.

我有以下代码

import pandas as pd
import numpy as np
pd.DataFrame([{'aa' : 10}, np.nan])

但是失败并显示以下消息

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.11/site-packages/pandas/core/frame.py", line 782, in __init__
    arrays, columns, index = nested_data_to_arrays(
                             ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pandas/core/internals/construction.py", line 498, in nested_data_to_arrays
    arrays, columns = to_arrays(data, columns, dtype=dtype)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pandas/core/internals/construction.py", line 832, in to_arrays
    arr, columns = _list_of_dict_to_arrays(data, columns)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pandas/core/internals/construction.py", line 912, in _list_of_dict_to_arrays
    pre_cols = lib.fast_unique_multiple_list_gen(gen, sort=sort)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "pandas/_libs/lib.pyx", line 374, in pandas._libs.lib.fast_unique_multiple_list_gen
  File "/usr/local/lib/python3.11/site-packages/pandas/core/internals/construction.py", line 910, in <genexpr>
    gen = (list(x.keys()) for x in data)
                ^^^^^^
AttributeError: 'float' object has no attribute 'keys'

您能帮忙解决这个问题吗?

最佳答案

对我来说似乎更像是一个错误,或者这种行为可能只是有意为之。 DataFrame构造函数将您的数据(包含混合元素的列表)视为字典列表,但事实并非如此。据我了解,这是由于 this仅检查您传递的列表的第一项的函数:

def treat_as_nested(data) -> bool:
    """
    Check if we should use nested_data_to_arrays.
    """
    return (
        len(data) > 0
        and is_list_like(data[0])
        and getattr(data[0], "ndim", 1) == 1
        and not (isinstance(data, ExtensionArray) and data.ndim == 2)
    )

有趣的是,如果我们更改元素的顺序,代码运行不会出现任何问题。

print(pd.DataFrame([np.nan, {'aa': 10}]))

            0
0         NaN
1  {'aa': 10}

关于python-3.x - 将列表转换为 pandas 数据框,其中列表包含字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77130056/

相关文章:

python-3.x - yaml 八进制整数生成错误

python - 我可以在代码中的 python 游戏中包含音乐吗?

python - python中类型转换函数的时间复杂度是多少?

python - 按字母顺序(不区分大小写)旋转( reshape )pandas 数据框

python - 使用引用列在数据框中的行值之间进行选择?

python - 根据字符串列表对列表列表进行排序

python - 从python中的函数返回错误字符串

python - 查找字符串中的子字符串

python - 在检查长度时添加两个列表

python - 将自定义类追加到另一个类中列出