gpt4 book ai didi

python - 将函数应用于 Pandas 中除一列之外的所有列

转载 作者:行者123 更新时间:2023-12-04 01:02:48 26 4
gpt4 key购买 nike

我希望将一个函数应用于 Pandas 中除一列之外的所有列,同时保持该列的原样。我有一个可以满足我需要的工作版本,但对于如此简单的事情来说似乎异常漫长。我想知道是否有更好的方法...

df = pd.DataFrame(columns = ['firstcol','secondcol','thirdcol'],
data=[['a1',1,'a6.1'],['b2',3,'b9.3'],['c12',4,'c2']])
我的数据框由字符串和整数组成。每列都不包含特定类型,我希望进行标准化,以便所有列都是数字(整数或浮点数,因为我有一些十进制值)。所以,在上面的玩具数据中,我需要转换第一列和第三列,而不要理会第二列......
df.loc[:, df.columns != 'secondcol'] = df.loc[:, df.columns != 'secondcol'].applymap(lambda x: float(re.sub(r'[^\d.]','', x)))
为清楚起见,这一行:(1) 指定除了名为“secondcol”的列之外的所有内容,(2) 使用 applymaplambda函数删除非数字(或十进制)字符,以及 (3) 转换为浮点数。
这会产生所需的输出,但正如我所说的那样可读性不是很强。我是否偶然发现了执行此操作的最佳方法,还是有更简单的替代方法?

最佳答案

IIUC,您可以选择非数字数据类型列并替换它们的值:

non_numerics = df.select_dtypes(exclude="number").columns

df[non_numerics] = df[non_numerics].apply(lambda x: x.str.replace(r"[^\d.]", "").astype(float))
我用你的正则表达式替换了 applymap,但不是逐元素替换但按列使用 apply (如果您愿意,您可以使用您的线路更改为 applymap)。
要得到
>>> df

firstcol secondcol thirdcol
0 1.0 1 6.1
1 2.0 3 9.3
2 12.0 4 2.0

关于python - 将函数应用于 Pandas 中除一列之外的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67692245/

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