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

Nat*_*oyd 3 pandas

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

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

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

但我不能这样说:

df['first_letter'], df['second_letter'] = df.apply(lambda x: (x['filename'][:1], x['filename'][1:2]), axis=1)
Run Code Online (Sandbox Code Playgroud)

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

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

jor*_*ris 7

您可以将两个值放在一个Series中,然后它将作为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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)