首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用apply将熊猫数据栏分割成多个?

如何使用apply将熊猫数据栏分割成多个?
EN

Stack Overflow用户
提问于 2019-08-08 03:45:12
回答 1查看 69关注 0票数 1

我想使用apply轻松地将我的列分割成两个(或更多)。(我可以像使用here那样使用split,但是有些异常很难处理。This答案类似,但同样输出一列。

代码语言:javascript
运行
复制
import pandas as pd

df = pd.DataFrame({"xVal":[1,2,7,4], "xRef":["1-2","2-3",">4", "NoReference"]})

def sep_ref(row):
    if '-' in row:
        return row.split("-")
    else:
        # handle and return some list
        return [row, row]

# broken assinment
df['xlow'], df['xhigh'] = df.xRef.apply(sep_ref)

df

代码语言:javascript
运行
复制
   xVal            xRef
0     1           '1-2'
1     2           '2-3'
2     7            '>4'
3     4   'NoReference'

期望输出

代码语言:javascript
运行
复制
   xVal  xlow  xhigh
0     1     1      2
1     2     2      3
2     7     4    NaN
3     4   NaN    NaN

简单的解决方案是运行两个单独的应用函数,但这不那么优雅,可能会使异常处理更加困难。是否有一种方法一次追加2列与应用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-08 03:55:59

更新:

我刚刚注意到NaN的首选项。下面是一个解决办法:

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np

df = pd.DataFrame({"xVal":[1,2,7,4], "xRef":["1-2","2-3",">4", "NoReference"]})

def sep_ref(row):
    if '-' in row:
        return [int(x) for x in row.split("-")]
    elif row.startswith('>'):
        return [int(row[1:]), np.nan]
    elif row.startswith('<'):
        return [np.nan, int(row[1:])]
    else:
        return [np.nan, np.nan]

# not broken assinment
df['xlow'] = None
df['xhigh'] = None
df[['xlow', 'xhigh']] = [*df.xRef.apply(sep_ref)]
print(df)
代码语言:javascript
运行
复制
   xVal         xRef  xlow  xhigh
0     1          1-2   1.0    2.0
1     2          2-3   2.0    3.0
2     7           >4   4.0    NaN
3     4  NoReference   NaN    NaN

原版:

为此,我认为您需要首先初始化"xlow“和"xhigh”列。

代码语言:javascript
运行
复制
# not broken assignment
df['xlow'] = None
df['xhigh'] = None
df[['xlow', 'xhigh']] = [*df.xRef.apply(sep_ref)]
print(df)

输出:

代码语言:javascript
运行
复制
   xVal         xRef         xlow        xhigh
0     1          1-2            1            2
1     2          2-3            2            3
2     7           >4           >4           >4
3     4  NoReference  NoReference  NoReference
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57404910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档