Python Pandas DataFrame重名列仅显示单个且shape返回值异常问题
问题根因
你传入pd.DataFrame的字典存在重复键calories,Python原生字典的语法规则会默认使用最后出现的重复键值覆盖之前的所有同键值,因此实际传入Pandas的字典仅保留最后一个calories对应的数据,这是列数与预期不符的根本原因,并非Pandas的已知缺陷。
解决方案
- 方案1:为不同分类的卡路里列添加前缀避免重名,是最常用的处理方式
import pandas as pd burgerCalories = [300,250,380,474] drinkCalories = [150,140,120,175] sideCalories = [100,57,70,0] dessertCalories = [167,266,75,0] burgerNames = ['cheese burger','ham burger','fish burger','veggie burger'] drinkNames = ['pepsi','orange juice','milk','orange juice'] sideNames = ['fries','baked potato','chef salad','no side order'] dessertNames = ['apple pie','sundae','fruit cup','no dessert'] df =pd.DataFrame({ 'burgers':burgerNames, 'burger_calories':burgerCalories, 'drinks':drinkNames, 'drink_calories':drinkCalories, 'sides':sideNames, 'side_calories':sideCalories, 'desserts':dessertNames, 'dessert_calories':dessertCalories}) print(df) print(df.shape) # 输出为 (4, 8),符合预期
- 方案2:如果业务确实需要保留多个同名
calories列,可通过横向拼接多个DataFrame实现
import pandas as pd burgerCalories = [300,250,380,474] drinkCalories = [150,140,120,175] sideCalories = [100,57,70,0] dessertCalories = [167,266,75,0] burgerNames = ['cheese burger','ham burger','fish burger','veggie burger'] drinkNames = ['pepsi','orange juice','milk','orange juice'] sideNames = ['fries','baked potato','chef salad','no side order'] dessertNames = ['apple pie','sundae','fruit cup','no dessert'] # 分别构造各分类的小DataFrame df_burger = pd.DataFrame({'burgers': burgerNames, 'calories': burgerCalories}) df_drink = pd.DataFrame({'drinks': drinkNames, 'calories': drinkCalories}) df_side = pd.DataFrame({'sides': sideNames, 'calories': sideCalories}) df_dessert = pd.DataFrame({'desserts': dessertNames, 'calories': dessertCalories}) # 横向合并得到最终表 df = pd.concat([df_burger, df_drink, df_side, df_dessert], axis=1) print(df) print(df.shape) # 输出为 (4, 8),符合预期
内容的提问来源于stack exchange,提问作者inMemory
相关产品推荐
相关产品推荐

