gpt4 book ai didi

python - 将自定义函数应用于现有列以输出多列

转载 作者:太空宇宙 更新时间:2023-11-04 09:49:06 25 4
gpt4 key购买 nike

这是我的起始 df:

import numpy as np
import pandas as pd

df = pd.DataFrame(['alpha', 'beta'], columns = ['text'])
df
text
0 alpha
1 beta

这是我想要的最终结果:

    text    first           second          third
0 alpha alpha-first alpha-second alpha-third
1 beta beta-first beta-second beta-third

我已经编写了自定义函数 parse(),没有问题:

def parse(text):
return [text + ' first', text + ' second', text + ' third']

现在我尝试将 parse() 应用于初始 df,这是出现错误的地方:

1) 如果我尝试以下操作:

df = df.reindex(columns = list(df.columns) + ['first', 'second', 'third']) # Create empty columns    
df[['first', 'second', 'third']] = df.text.apply(parse)

我得到:

ValueError: Must have equal len keys and value when setting with an ndarray

2) 略有不同的版本:

df = df.reindex(columns = list(df.columns) + ['first', 'second', 'third']).astype(object) # Create empty columns of "object" type    
df[['first', 'second', 'third']] = df.text.apply(parse)

我得到:

ValueError: shape mismatch: value array of shape (2,) could not be broadcast 
to indexing result of shape (3,2)

我哪里错了?

编辑:

我应该澄清一下,parse() 本身是我要解决的现实问题中的一个复杂得多的函数。 (它需要一个段落,在其中找到 3 种特定类型的字符串,并将这些字符串输出为长度为 3 的列表)。在我上面的代码中,我对 parse() 进行了一些随机的简单定义,作为替代,以避免陷入与我遇到的两个错误无关的细节中。

最佳答案

无需申请:

import pandas as pd

df = pd.DataFrame(['alpha', 'beta'], columns = ['text'])

for i in ['first', 'second', 'third']:
df[i] = df.text + '-' + i

# text first second third
# 0 alpha alpha-first alpha-second alpha-third
# 1 beta beta-first beta-second beta-third

一般来说,为您的计算选择的“过程类型”的层次应该是:

  1. 向量化计算,如上。
  2. pd.Series.apply
  3. pd.DataFrame.apply
  4. pd.DataFrame.iterrows

关于python - 将自定义函数应用于现有列以输出多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48603180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com