我想将 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/