gpt4 book ai didi

python - 从长度不均匀的字典创建一个 Pandas 数据框

转载 作者:行者123 更新时间:2023-12-04 08:53:39 24 4
gpt4 key购买 nike

对于字典:

d = {
"a": [1],
"b": 2,
"c": [[7, 8, 9], ["a", "b", "c"], [9, 10, 11]],
"d": None,
}
我想实现这个数据框:
pd.DataFrame({"a": [[1], [1], [1]],
"b": [2, 2, 2],
"c": [[7, 8, 9], ["a", "b", "c"], [9, 10, 11]],
"d": [None, None, None]})
     a  b            c     d
0 [1] 2 [7, 8, 9] None
1 [1] 2 [a, b, c] None
2 [1] 2 [9, 10, 11] None
基本上,列应该自我复制,直到最长列的长度。
我知道在 R 中我是否创建了一个数据框,比如 NA指示我要复制的行并使用 tidyr::fill ,python中有没有类似的东西?
df = data.frame(
a = c("a", NA, NA),
b = c(1, 2, 3)
)
tidyr::fill(df, a)
  a b
1 a 1
2 a 2
3 a 3

最佳答案

以下是可能的解决方案示例:

d = {
"a": [1],
"b": 2,
"c": [[7, 8, 9], ["a", "b", "c"], [9, 10, 11]],
"d": None,
}

max_len = max(len(l) if isinstance(l, list) else 1 for l in d.values())

for key in d.keys():
if isinstance(d[key], list):
if len(d[key]) != max_len:
d[key] = np.repeat(d[key], max_len).tolist()
else:
d[key] = np.repeat(np.array(d[key]), max_len).tolist()
结果:
{
'a': [1, 1, 1],
'b': [2, 2, 2],
'c': [[7, 8, 9], ['a', 'b', 'c'], [9, 10, 11]],
'd': [None, None, None]
}
但它显然只适用于特定情况,当所有列只有一个元素时。为了解决这个任务,通常还应该指定应该如何处理不同长度的列:是否应该重复整个列并在最后一次迭代时进行剩余修剪,或者应该只重复第一个/最后一个值,或者其他一些方法。

关于python - 从长度不均匀的字典创建一个 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63966750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com