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

时间:2019-08-29 04:02:41

标签: python pandas

我的数据框如下

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. 放置行new的行是否可以集成在第一行中?

2 个答案:

答案 0 :(得分:1)

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

如果您尝试生成列名而不是time_0到time_A,则没有生成它,您正在传递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

答案 1 :(得分:1)

使用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