OD1*_*995 4 python dictionary dataframe pandas
我有一本字典如下:
d = {("Sam","Scotland","23") : 25,
("Oli","England","23") : 28,
("Ethan","Wales","18") : 19}
Run Code Online (Sandbox Code Playgroud)
我想将它转换成一个如下所示的 Pandas 数据框:
Name Country Age Count
Sam Scotland 23 25
Oli England 23 28
Ethan Wales 18 19
Run Code Online (Sandbox Code Playgroud)
我试着这样做:
df = pd.DataFrame.from_items(d.items(),orient="index",
columns=["Name","Country","Age","Count"])
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
ValueError: The value in each (key, value) pair must be an array, Series, or dict
Run Code Online (Sandbox Code Playgroud)
我很欣赏通过循环遍历元组的每个项目和每个元素是可能的,但是有没有更干净的方法来做到这一点?
您可以直接pd.DataFrame.from_dict使用字典。这会根据您的输入字典键创建一个键。您可以将其转换为,然后使用:tupleMultiIndexreset_index
cols = ['Name', 'Country', 'Age', 'Count']
df = pd.DataFrame.from_dict(d, orient='index', columns=cols[-1])
df.index = pd.MultiIndex.from_tuples(df.index, names=cols[:-1])
df = df.reset_index()
Run Code Online (Sandbox Code Playgroud)
您可以通过连接键和值来手动构建 DataFrame 的行,例如:
import pandas as pd
d = {("Sam", "Scotland", "23"): 25,
("Oli", "England", "23"): 28,
("Ethan", "Wales", "18"): 19}
df = pd.DataFrame([k + (v,) for k, v in d.items()], columns=['name', 'country', 'age', 'count'])
print(df)
Run Code Online (Sandbox Code Playgroud)
输出
name country age count
0 Ethan Wales 18 19
1 Sam Scotland 23 25
2 Oli England 23 28
Run Code Online (Sandbox Code Playgroud)
或者作为替代:
import pandas as pd
d = {("Sam", "Scotland", "23"): 25,
("Oli", "England", "23"): 28,
("Ethan", "Wales", "18"): 19}
df = pd.DataFrame(
[{"name": name, "country": country, "age": age, "count": value} for (name, country, age), value in d.items()])
print(df)
Run Code Online (Sandbox Code Playgroud)
输出
age count country name
0 23 28 England Oli
1 23 25 Scotland Sam
2 18 19 Wales Ethan
Run Code Online (Sandbox Code Playgroud)
这个想法是将键值对转换为字典列表,然后将其传递给DataFrame.