使用列表切片分配多个pandas列

时间:2015-04-01 04:14:39

标签: python pandas

在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     

有没有办法在不明确地将每个变量分配给列表的切片索引的情况下执行此操作?

1 个答案:

答案 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