代码之家  ›  专栏  ›  技术社区  ›  Mohit Motwani

将具有字典值的序列值转换为数据帧。不是系列本身

  •  1
  • Mohit Motwani  · 技术社区  · 6 年前

    我有这样一个系列:

    d1 = {'Class': 'A', 'age':35, 'Name': 'Manoj'}
    d2 = {'Class': 'B', 'age':15, 'Name': 'Mot'}
    d3 = {'Class': 'B', 'age':25, 'Name': 'Vittoo'}
    
    ser = [d1, d2, d3]
    
    dummy = pd.Series(ser)
    dummy
    0     {'Class': 'A', 'age': 35, 'Name': 'Manoj'}
    1     {'Class': 'B', 'age': 15, 'Name': 'Mot'}
    2    {'Class': 'B', 'age': 25, 'Name': 'Vittoo'}
    

    当我使用tou frame函数时,它会执行以下操作:

    dummy.to_frame()
    
                          0
    0   {'Class': 'A', 'age': 35, 'Name': 'Manoj'}
    1   {'Class': 'B', 'age': 15, 'Name': 'Mot'}
    2   {'Class': 'B', 'age': 25, 'Name': 'Vittoo'}
    

    但我想得到的是:

    Class   Name    age
    0   A   Manoj   35
    1   B   Mot     15
    2   B   Vittoo  25
    

    我试过这种方法,效果很好:

    df = pd.DataFrame(dummy)
    df = df[0].apply(pd.Series)
    df
    

    但是它感觉非常低效,因为我需要将Series转换为dataframe,然后再次将Series函数应用于完整的dataframe。由于我正在处理数百万行,我想知道是否有更有效的解决方案。

    1 回复  |  直到 6 年前
        1
  •  2
  •   jezrael    6 年前

    使用 DataFrame Series 施工单位:

    d1 = {'Class': 'A', 'age':35, 'Name': 'Manoj'}
    d2 = {'Class': 'B', 'age':15, 'Name': 'Mot'}
    d3 = {'Class': 'B', 'age':25, 'Name': 'Vittoo'}
    
    ser = [d1, d2, d3]
    
    df = pd.DataFrame(ser)
    print (df)
      Class    Name  age
    0     A   Manoj   35
    1     B     Mot   15
    2     B  Vittoo   25
    

    如果输入数据是 系列 数据帧 建造师, to_frame 不需要:

    dummy = pd.Series(ser)
    
    df = pd.DataFrame(dummy.values.tolist())
    print (df)
      Class    Name  age
    0     A   Manoj   35
    1     B     Mot   15
    2     B  Vittoo   25