Pandas - 从包含列表的字典中创建只有一行的数据框
Posted
技术标签:
【中文标题】Pandas - 从包含列表的字典中创建只有一行的数据框【英文标题】:Pandas - Create dataframe with only one row from dictionary containing lists 【发布时间】:2018-10-16 01:58:59 【问题描述】:我有这本词典:
d = 'val_1': [1,2,3,4,5], 'val_2': 4
我想用它创建一个只有一行的 pandas DataFrame。
当我这样做时:
import pandas as pd
df = pd.DataFrame(d)
print(df)
我得到 5 行:
val_1 val_2
0 1 4
1 2 4
2 3 4
3 4 4
4 5 4
但是,当我将它附加到现有数据框时,我得到了我想要的行为。
import pandas as pd
df = pd.DataFrame(d)
df = df.append(d, ignore_index=True)
print(df)
val_1 val_2
0 1 4
1 2 4
2 3 4
3 4 4
4 5 4
5 [1, 2, 3, 4, 5] 4
如何从 dict 创建数据框,并且只获取一行,如 append 的情况?
val_1 val_2
0 [1, 2, 3, 4, 5] 4
【问题讨论】:
【参考方案1】:将值包装在一个列表中:
pd.DataFrame(k: [v] for k, v in d.items())
# val_1 val_2
#0 [1, 2, 3, 4, 5] 4
【讨论】:
【参考方案2】:您可以改为以pd.Series
开头:
pd.Series(d).to_frame().T
val_1 val_2
0 [1, 2, 3, 4, 5] 4
【讨论】:
【参考方案3】:你可以使用
df=pd.DataFrame(columns=d.keys())
df.append(d, ignore_index=True)
Out[26]:
val_1 val_2
0 [1, 2, 3, 4, 5] 4
【讨论】:
这会在我运行它时返回TypeError: object of type 'int' has no len()
...有什么想法吗?
@cᴏʟᴅsᴘᴇᴇᴅ 让我检查一下,它在我这边工作正常......有线
如果有帮助,我正在使用 IPython 6.2.1 运行 python3.6。 d
与问题相同
@cᴏʟᴅsᴘᴇᴇᴅ 刚刚发生了一些有趣的事情,我无法重现这个问题,相信我,当我运行它时,它可以工作,现在它不再工作了..
奇怪,我认为您的d
以前可能有所不同。无论如何,它现在运行良好。【参考方案4】:
您可以使用from_dict
,但列的顺序可以互换:
In[151]: pd.DataFrame.from_dict(d,orient='index').T
Out[151]:
val_2 val_1
0 4 [1, 2, 3, 4, 5]
【讨论】:
以上是关于Pandas - 从包含列表的字典中创建只有一行的数据框的主要内容,如果未能解决你的问题,请参考以下文章
从不同长度的元组列表的字典中创建 Pandas DataFrame