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

标签 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 函数,该函数将打开文件并读取和解析第一行。

最佳答案

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

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

关于pandas - pd.dataframe.apply() 创建多个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23836289/

相关文章:

python - Pandas 数据框的颜色行并转换为 HTML 表格

python - 如何知道用 pandas 用 python 完成的图表的图形引用?

python - 基于计数列对 Pandas 数据框进行下采样

python - 使用嵌套 for 和 if 循环时加快 Python 速度

python - 分块导入 parquet 文件并插入 DuckDB

python - Pandas:如何(干净地)反转具有相同类别的两列?

python - 在 pandas 中展平一个系列,即一个元素为列表的系列

python - 如果列的组合与 Panda Dataframe 相同,如何删除行

python - float() 参数必须是字符串或数字,而不是 'Timestamp'

python - 在Python中创建频数分布表