我的数据框如下
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)
我的问题:
是否可以将自动生成的名称改为字母(A,B,C ..)而不是数字?
放置行new
的行是否可以集成在第一行中?
答案 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