pd.dataframe.apply()创建多个新列

时间:2014-05-23 18:37:49

标签: pandas

我有一堆文件要打开,读取第一行,将其解析为几个预期的信息,然后将文件名和这些数据作为行放在数据框中。我的问题涉及以pandanic / pythonic方式构建数据帧的推荐语法(我已经想到的文件打开和解析)。

对于一个愚蠢的例子,当您想要创建一个新列时,建议执行以下操作:

df = pd.DataFrame(files, columns=['filename'])
df['first_letter'] = df.apply(lambda x: x['filename'][:1], axis=1)

但是,我不能这样做:

df['first_letter'], df['second_letter'] = df.apply(lambda x: (x['filename'][:1], x['filename'][1:2]), axis=1)

因为apply函数只创建一个包含元组的列。

请记住,我将放置一个函数来代替lambda函数,该函数将打开文件并读取并解析第一行。

1 个答案:

答案 0 :(得分:7)

您可以将两个值放在一个系列中,然后它将作为数据帧从apply(每个系列是该数据帧中的一行)返回。用一个虚拟的例子:

In [29]: df = pd.DataFrame(['Aa', 'Bb', 'Cc'], columns=['filenames'])

In [30]: df
Out[30]:
  filenames
0        Aa
1        Bb
2        Cc

In [31]: df['filenames'].apply(lambda x : pd.Series([x[0], x[1]]))
Out[31]:
   0  1
0  A  a
1  B  b
2  C  c

然后,您可以分配两个新列:

In [33]: df[['first', 'second']] = df['filenames'].apply(lambda x : pd.Series([x[0], x[1]]))

In [34]: df
Out[34]:
  filenames first second
0        Aa     A      a
1        Bb     B      b
2        Cc     C      c