我有一堆文件要打开,读取第一行,将其解析为几个预期的信息,然后将文件名和这些数据作为行放在数据框中。我的问题涉及以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函数,该函数将打开文件并读取并解析第一行。
答案 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