代码之家  ›  专栏  ›  技术社区  ›  blue_note

数据帧键错误,尽管它存在

  •  3
  • blue_note  · 技术社区  · 6 年前

    给定数据

    rows = [
        {'x': 1, 'y': 2, 'z': 3},
        {'x': 2, 'y': 2, 'z': 3},
    ]
    

    如果我尝试构建这样的数据帧

    frame = pd.DataFrame.from_records(rows, index='x')
    

    它很好用。然而,这

    frame = pd.DataFrame.from_records(rows, index='x', columns=['y', 'z'])
    

    (我希望这是等效的)失败了,出现了奇怪的错误: KeyError: 'x' . 发生了什么?

    4 回复  |  直到 6 年前
        1
  •  3
  •   gorjan    6 年前

    你需要包括 x 在你的专栏里。如:

    rows = [{'x': 1, 'y': 2, 'z': 3}, {'x': 2, 'y': 2, 'z': 3}]
    frame = pd.DataFrame.from_records(rows, index='x')
    display(frame)
        y   z
    x       
    1   2   3
    2   2   3
    frame = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])
    display(frame)
        y   z
    x       
    1   2   3
    2   2   3
    
        2
  •  5
  •   JE_Muc    6 年前

    添加 x 对你 columns :

    df = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])
    
        3
  •  3
  •   Rakesh    6 年前

    用途:

    import pandas as pd
    
    rows = [
        {'x': 1, 'y': 2, 'z': 3},
        {'x': 2, 'y': 2, 'z': 3},
    ]
    
    frame = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])
    print(frame)
    

    输出:

       y  z
    x      
    1  2  3
    2  2  3
    
        4
  •  3
  •   jpp    6 年前

    columns 用作筛选器 之前 你的 index 参数已处理。所以,你看 KeyError 因为熊猫找不到 x 过滤后 ['y', 'z'] . 一个解决办法是 reindex 将数据读取到数据帧后:

    frame = pd.DataFrame.from_records(rows, index='x').reindex(columns=['y', 'z'])
    

    或者,可以指定所有字段,包括索引:

    frame = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])
    

    这样做的好处是,不需要在不需要的字段中进行读取,并作为后续步骤进行过滤。