在Python中,可以将多个变量分配给列表中的对象。是否可以为pandas数据帧执行相同的操作,例如:
df.Trinucleotide
0 ACA
1 ACC
2 ACG
3 ACT
4 ACA
5 ACC
6 ACG
7 ACT
8 ACA
9 ACC
df.loc[:,['First','Second','Third']] = df.Trinucleotide.apply(lambda x: list(x))
这导致 KeyError:" [' First' '其次'使用逗号分隔变量时,#3;三']不在索引" 错误中也不起作用。
df.loc[:,'First'], df.loc[:,'Second'],df.loc[:,'Third'] = df.Trinucleotide.apply(lambda x: list(x))
ValueError: too many values to unpack
有没有办法在不明确地将每个变量分配给列表的切片索引的情况下执行此操作?
答案 0 :(得分:3)
要在使用apply
时创建多个列,我认为最好返回Series
而不是列表。您可以通过将列名称设置为Series
的索引来设置列名称。所以你可以这样做:
# Reading your data in
df = pd.read_clipboard(header=None, index_col=0)
df.columns = ['Trinucleotide']
df
Out[9]:
Trinucleotide
0
0 ACA
1 ACC
2 ACG
# etc.
new_cols = df['Trinucleotide'].apply(
lambda x: pd.Series(list(x), index=['First', 'Second', 'Third'])
)
df[['First', 'Second', 'Third']] = new_cols
df
Out[8]:
Trinucleotide First Second Third
0
0 ACA A C A
1 ACC A C C
2 ACG A C G
3 ACT A C T
4 ACA A C A
5 ACC A C C
6 ACG A C G
7 ACT A C T
8 ACA A C A
9 ACC A C C