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

自动生成的名称是字母而不是数字

  •  1
  • moys  · 技术社区  · 6 年前

    我有一个数据框架如下

    empIdn  date        new
    517     2019-05-02  [12:00:12, 12:32:05, 05:18:57, 05:23:02]
    

    我想在列中拆分值 new 到各个列。 像这样的东西

    empIdn  date        time_0      time_1      time_2      time_3
    517     2019-05-02  12:00:12    12:32:05    05:18:57    05:23:02
    

    我可以用

    df = df.join(pd.DataFrame(df3.new.values.tolist(), df.index).add_prefix('time_'))
    df.drop('new', axis=1, inplace = True)
    

    我的问题是:

    1. 有没有办法让自动生成的名字是字母(A,B,C.)而不是数字?

    2. 该行是否可以删除列 新的 是否整合到第一行?

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

    使用 rename 用于将整数转换为大写字母并用于删除 new 使用 DataFrame.pop

    import string
    d = dict(enumerate(list(string.ascii_uppercase)))
    #print (d)
    
    df = df3.join(pd.DataFrame(df3.pop('new').values.tolist(), 
                               index=df3.index)
             .rename(columns=d)
             .add_prefix('time_'))
    
    print (df)
    empIdn        date    time_A    time_B    time_C    time_D
    0     517  2019-05-02  12:00:12  12:32:05  05:18:57  05:23:02
    
        2
  •  1
  •   Shishir Naresh    6 年前

    尝试以下代码。我希望这会有所帮助。

    如果您试图生成列名称而不是时间“0到时间”,那么您不会生成它,而是传递 df.index 它是rangeindex(start=0,stop=1,step=1),例如(0,1,2,3),然后添加后缀使其成为 time_ .

    现在您的问题是生成列名称,如time_a、time_b、time_c和time_d。

    它可以用下面的代码来完成。

    pd.DataFrame(data.new.values.tolist(), columns=['A','B','C','D']).add_prefix('time_')

    对于第二个问题,您可以使用带有join的drop语句,如下所示:

    df = df.join(pd.DataFrame(data.new.values.tolist(), columns=['A','B','C','D']).add_prefix('time_')).drop('new', axis=1)
    

      empIdn       date       time_A    time_B  time_C  time_D
    0   517    2019-05-02   12:00:12    12:32:05    05:18:57    05:23:02