构建字典 - 列表长度不同

3
我想知道是否可以创建一个字典,并将其转换为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个回答

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

有没有一种简单的方法将系列 P 转换为 float 类型? - jpp
@jpp 我不这么认为,因为这是由 T 产生的结果。 - BENY
@jpp 一旦你构建好了数据框,你可以在你想要转换的序列上调用 .astype(np.float) - David O'Neill

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 构造函数足够智能,可以将数字系列转换为数字,即使输入的元组列表中每个元组包含混合类型。

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

这很好,但有点繁琐。您建议如何使 OP 能够自动向每个输入列表添加所需数量的 np.nan 值? - jpp
在我们获得的信息中,没有明显的方法 - 我们不知道哪个列表最长,或者NaN应该放在哪里等等。我主要发布这种方法是为了向OP展示np.nan数据类型是他想要的。 - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接