建构字典-清单长度不一样

时间:2018-12-19 22:35:20

标签: python pandas dataframe

我想知道是否可以创建字典并将其转换为Pandas数据帧,其中每个字典键都有一个值数组,但是数组的长度会有所不同。

例如col3仅具有2个值,所有其他列表具有3个值。我能以某种方式将NaN填写到缺失值中而不会出错吗?

col1 = ["Bottom", "sss", "ddd"]
col2 = ["boo", "sss", "foo"]
col3 = [999, 89]

d = {"Type": col1, "Style": col2, "Profit": col3}
df = pd.DataFrame.from_dict(d)

3 个答案:

答案 0 :(得分:1)

处理

df=pd.DataFrame([col1,col2,col3],index=['T','S','P']).T
df
Out[165]: 
        T    S     P
0  Bottom  boo   999
1     sss  sss    89
2     ddd  foo  None

另一个选项

pd.Series(d).apply(pd.Series).T
Out[174]: 
     Type Style Profit
0  Bottom   boo    999
1     sss   sss     89
2     ddd   foo    NaN

答案 1 :(得分:1)

并非严格要求词典。使用itertools.zip_longest

from itertools import zip_longest

df = pd.DataFrame(list(zip_longest(col1, col2, col3)),
                  columns=['Type', 'Style', 'Profit'])

print(df)

     Type Style  Profit
0  Bottom   boo   999.0
1     sss   sss    89.0
2     ddd   foo     NaN

请注意,即使元组输入列表中的每个元组都包含混合类型,pd.DataFrame构造函数也足够聪明,可以将数字序列转换为数值。

答案 2 :(得分:0)

好的-您可以用numpy.nan填写缺失的值:

import numpy as np

col1 = ["Bottom", "sss", "ddd"]
col2 = ["boo", "sss", "foo"]
col3 = [999, 89, np.nan]

d = {"Type": col1, "Style": col2, "Profit": col3}
df = pd.DataFrame.from_dict(d)

输出

   Profit Style    Type
0   999.0   boo  Bottom
1    89.0   sss     sss
2     NaN   foo     ddd