用NA值填充dict以允许转换为pandas datafram

2024-04-27 03:16:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dict,它保存不同时间延迟的计算值,这意味着它们开始于不同的日期。例如,我的数据可能如下所示:

Date      col1    col2    col3    col4    col5
01-01-15  5       12      1      -15      10
01-02-15  7       0       9       11      7
01-03-15          6       1       2       18
01-04-15          9       8       10
01-05-15         -4               7
01-06-15         -11             -1
01-07-15          6               

其中每个头是键,每个值列是每个键的值(我使用defaultdict(list)来表示这个)。当我试图运行pd.DataFrame.from_dict(d)时,我得到一个错误,说明所有数组的长度必须相同,这是可以理解的。有没有一种简单/简单的方法来填充或填充数字,以便输出的结果是下面的数据帧?在

^{pr2}$

或者我必须手动处理每个列表吗?在

以下是重新创建字典的代码:

import pandas as pd
from collections import defaultdict

d = defaultdict(list)
d["Date"].extend([
    "01-01-15", 
    "01-02-15", 
    "01-03-15", 
    "01-04-15", 
    "01-05-15",
    "01-06-15",
    "01-07-15"
]
d["col1"].extend([5, 7])
d["col2"].extend([12, 0, 6, 9, -4, -11, 6])
d["col3"].extend([1, 9, 1, 8])
d["col4"].extend([-15, 11, 2, 10, 7, -1])
d["col5"].extend([10, 7, 18])

Tags: 数据fromimportdataframedatedictlistcol2
3条回答

另一个选择是将from_dictorient='index'一起使用,然后进行转换:

my_dict = {'a' : [1, 2, 3, 4, 5], 'b': [1, 2, 3]}
df = pd.DataFrame.from_dict(my_dict, orient='index').T

请注意,如果列具有不同的类型,例如一列中的float,另一列中的字符串,则可能会遇到{}的问题。在

结果输出:

^{pr2}$
#dictionary of different lengths...
my_dict = {'a' : [1, 2, 3, 4, 5], 'b': [1, 2, 3]}
pd.DataFrame(dict([(col_name,pd.Series(values)) for col_name,values in my_dict.items() ]))

输出-

^{pr2}$

使用itertools(Python 3):

import itertools
pd.DataFrame(list(itertools.zip_longest(*d.values())), columns=d.keys()).sort_index(axis=1)
Out[728]: 
   col1  col2  col3  col4  col5
0   5.0    12   1.0 -15.0  10.0
1   7.0     0   9.0  11.0   7.0
2   NaN     6   1.0   2.0  18.0
3   NaN     9   8.0  10.0   NaN
4   NaN    -4   NaN   7.0   NaN
5   NaN   -11   NaN  -1.0   NaN
6   NaN     6   NaN   NaN   NaN

相关问题 更多 >