lhk*_*lhk 6 python dataframe data-structures pandas
我在列中有一个带有多索引的DataFrame,并希望使用词典来追加新行.
假设DataFrame中的每一行都是一个城市.列包含"距离"和"车辆".并且每个单元格将是在该距离上选择该车辆的人口的百分比.
我正在构建一个这样的索引:
index_tuples=[]
for distance in ["near", "far"]:
for vehicle in ["bike", "car"]:
index_tuples.append([distance, vehicle])
index = pd.MultiIndex.from_tuples(index_tuples, names=["distance", "vehicle"])
Run Code Online (Sandbox Code Playgroud)
然后我正在创建一个数据帧:
dataframe = pd.DataFrame(index=["city"], columns = index)
Run Code Online (Sandbox Code Playgroud)
数据帧的结构看起来很好.虽然大熊猫已经添加了Nans作为默认值?
现在我想为新城市设置一个字典并添加它:
my_home_city = {"near":{"bike":1, "car":0},"far":{"bike":0, "car":1}}
dataframe["my_home_city"] = my_home_city
Run Code Online (Sandbox Code Playgroud)
但这失败了:
ValueError:值的长度与索引的长度不匹配
这是完整的错误消息(pastebin)
更新:
谢谢你所有的好答案.我担心我的例子中的问题过于简单了.实际上我的索引嵌套了3个级别(它可能会变得更多).
所以我接受了将字典转换为元组列表的通用答案.这可能不像其他方法那样干净,但适用于任何多索引设置.
多索引是一个listof tuple,我们只需要修改你的dict,然后我们可以直接赋值
d = {(x,y):my_home_city[x][y] for x in my_home_city for y in my_home_city[x]}
df.loc['my_home_city',:]=d
df
Out[994]:
distance near far
vehicle bike car bike car
city NaN NaN NaN NaN
my_home_city 1 0 0 1
Run Code Online (Sandbox Code Playgroud)
更多信息
d
Out[995]:
{('far', 'bike'): 0,
('far', 'car'): 1,
('near', 'bike'): 1,
('near', 'car'): 0}
df.columns.values
Out[996]: array([('near', 'bike'), ('near', 'car'), ('far', 'bike'), ('far', 'car')], dtype=object)
Run Code Online (Sandbox Code Playgroud)