我有一个pandas数据框,对于这样的一列有不同的格式

Name Values
First 5-9
Second 7
Third -
Fourth 12-16

我需要迭代所有值列,如果格式类似于第一行5-9或第四行12-16,则将其替换为字符串中2个数字之间的平均值.

我试过了

if df["Value"].str.len() > 1:
    df["Value"] = df["Value"].str.split('-')
    df["Value"] = (df["Value"][0] + df["Value"][1]) / 2
elif df["Value"].str.len() == 1:
    df["Value"] = df["Value"].str.replace('-', 0)

Expected output

Name Values
First 7
Second 7
Third 0
Fourth 14

推荐答案

让我们splitexpand列,然后将值转换为float,并沿列轴计算mean:

s = df['Values'].str.split('-', expand=True)
df['Values'] = s[s != ''].astype(float).mean(1).fillna(0)

     Name  Values
0   First     7.0
1  Second     7.0
2   Third     0.0
3  Fourth    14.0

Python相关问答推荐

手动设置seborn/matplotlib散点图连续变量图例中显示的值

为什么我的sundaram筛这么低效

Cython无法识别Numpy类型

在numpy数组中寻找楼梯状 struct

使用嵌套对象字段的Qdrant过滤

如何在Python中将超链接添加到PDF中每个页面的顶部?

是否将Pandas 数据帧标题/标题以纯文本格式转换为字符串输出?

我怎样才能让深度测试在OpenGL中使用Python和PyGame呢?

如何将django url参数传递给模板&S url方法?

如何批量训练样本大小为奇数的神经网络?

如何让doctest在mkdocs的标记代码块中运行示例?

如何计算二十面体每条三角形边的中点

为什么Python多处理.Process()传递队列参数并且读取比函数传递队列参数和读取更快?

Chrome 122-如何允许不安全的内容?(不安全下载被阻止)

给定Pandas 列DataFrame中的一个值,在其他DataFrame中 Select 与该值最接近的N行

Python Curses Textbox.ather()删除空行,有没有办法保留它们?

如何在python中为列表中的每个项目分配来自另一个列表的相等数量的项目

用tab键改变焦点的Qt事件

返回最后一行以上的所有行,直到满足Python中的条件

在多级列中,对特定较低级别的类别重新排序