首页  >  文章  >  后端开发  >  如何从数组长度不均匀的字典构造 Pandas DataFrame?

如何从数组长度不均匀的字典构造 Pandas DataFrame?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-09 11:10:02626浏览

How to Construct Pandas DataFrames from Dictionaries with Uneven Array Lengths?

从具有不均匀数组长度的字典构造 DataFrame

在 Pandas 中处理具有不等长度数组的字典需要量身定制的方法。当尝试创建一个 DataFrame,其中每一列代表字典中的一个数组时,可能会遇到 ValueError:“数组必须具有相同的长度。”

利用系列对象

来规避此问题问题,我们利用 Pandas 的 Series 对象,它可以保存不同长度的数组。通过将每个字典值转换为 Series,我们可以有效地存储数组,而不管数组的长度如何。以下代码片段演示了这种方法:

import pandas as pd
import numpy as np

# Sample data generated via a reproducible seed
np.random.seed(2023)
data = {k: np.random.randn(v) for k, v in zip("ABCDEF", [10, 12, 15, 17, 20, 23])}

# Convert dictionary values to Series objects
series_dict = {k: pd.Series(v) for k, v in data.items()}

# Create DataFrame using these Series objects
df = pd.DataFrame(series_dict)

保留缺失值

处理不同长度的数组时,通常会遇到缺失值,即较短的数组无法填充剩余的单元格。默认情况下,Pandas 使用 NaN(非数字)值填充这些空白。此行为保留原始数据,同时提供一致的分析结构。

配置缺失值处理

如果需要,您可以使用 DataFrame 中的 Missing_values 参数自定义缺失值的处理( ) 构造函数。例如,要用零代替 NaN 替换缺失值,您可以指定missing_values=0,如下所示:

df = pd.DataFrame(series_dict, missing_values=0)

示例输出

以下输出说明了使用该方法创建的 DataFrame如上所述:

print(df)
      A         B         C         D         E         F
0  0.711674 -1.076522 -1.502178 -1.519748  0.340619  0.051132
1 -0.324485 -0.325682 -1.379593  2.097329 -1.253501 -0.238061
2 -1.001871 -1.035498 -0.204455  0.892562  0.370788 -0.208009
3  0.236251 -0.426320  0.642125  1.596488  0.455254  0.401304
4 -0.102160 -1.029361 -0.181176 -0.638762 -2.283720  0.183169
...       ...       ...       ...       ...       ...       ...
18       NaN       NaN       NaN       NaN       NaN       NaN
19       NaN       NaN       NaN       NaN       NaN       NaN
20       NaN       NaN       NaN       NaN       NaN       NaN
21       NaN       NaN       NaN       NaN       NaN       NaN
22       NaN       NaN       NaN       NaN       NaN       NaN
23 rows × 6 columns

正如您所观察到的,较短的数组会导致相应的 NaN 值单元格,提供数据的全面表示,同时保持所需的表格格式。

以上是如何从数组长度不均匀的字典构造 Pandas DataFrame?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn