我正在尝试从字典创建数据框:
dict = {'foo': [1, 2, 3, 4],
'bar': [5, 6, 7, 8]}
,然后使用以下命令创建数据框:
df = pd.DataFrame.from_dict(dict, orient='index')
但输出如下:
df:
0 1 2 3
foo 1 2 3 4
bar 4 5 6 7
但是我希望输出如下所示,只有一列:
df:
'column_name'
foo [1, 2, 3, 4]
bar [4, 5, 6, 7]
答案 0 :(得分:2)
您正在传递包含“类似列表”值的字典。当pandas
传递给DataFrame 构造函数时,会将字典的键解释为Series标签,并将每个列表中的值解释为每个Series的新行值。
使用from_dict
类方法时,将为您提供方向选项,该选项可让您指定字典的键是否代表行或列标签,但指定“类似列表”的值字典的内容仍将被解释为新列或新行。
同时使用这两种方法还要求值的长度一致。
pd.DataFrame.from_dict(dct, orient='index')
0 1 2 3
foo 1 2 3 4
bar 5 6 7 8
pd.DataFrame.from_dict(dct, orient='columns')
foo bar
0 1 5
1 2 6
2 3 7
3 4 8
相反,您对一维pd.Series
感兴趣,它将使用字典并将每个键用作行标签,并将每个值用作行值。
pd.Series(dct)
foo [1, 2, 3, 4]
bar [5, 6, 7, 8]
dtype: object
根据我在上面的评论,如果您对DataFrame感兴趣,则可以使用to_frame
,它将保留存储在Series
中的值。
pd.Series(dct).to_frame('column_name')
column_name
foo [1, 2, 3, 4]
bar [5, 6, 7, 8]
答案 1 :(得分:1)
如果您使用的是python3.6 +,则可以依靠字典的有序性质来创建仅以column_name
为键的另一本字典:
d = {'foo': [1, 2, 3, 4], 'bar': [5, 6, 7, 8]}
df = pd.DataFrame([{'column_name': v} for v in d.values()], index=d.keys())
df
column_name
foo [1, 2, 3, 4]
bar [5, 6, 7, 8]
否则,我肯定会默认使用@ user3483203的答案
答案 2 :(得分:1)
pd.DataFrame({'col_name': pd.Series(dict)})
结果:
col_name
foo [1, 2, 3, 4]
bar [5, 6, 7, 8]
答案 3 :(得分:1)
使用字典创建系列并转换为数据框:
dct = {'foo': [1, 2, 3, 4],
'bar': [5, 6, 7, 8]}
pd.Series(dct).to_frame('column_name')
Out[937]:
column_name
bar [5, 6, 7, 8]
foo [1, 2, 3, 4]
注意:请不要使用dict
作为变量名。这是一个坏习惯。
答案 4 :(得分:1)
您可以尝试:
frame=pd.Series(dict).rename('column_name')