Python 将函数应用于表中除一列以外的所有列

Python 将函数应用于表中除一列以外的所有列,python,pandas,Python,Pandas,我希望将函数应用于pandas中除一列以外的所有列,同时保持该列的原始状态。我有一个可以满足我需要的工作版本,但对于如此简单的东西来说,它似乎异常长。我想知道是否有更好的方法 df = pd.DataFrame(columns = ['firstcol','secondcol','thirdcol'], data=[['a1',1,'a6.1'],['b2',3,'b9.3'],['c12',4,'c2']]) 我的数据帧由字符串和整数组成。每一列都不包含特定的类型,我希望标准化,以

我希望将函数应用于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)使用
applymap
lambda
函数删除非数字(或十进制)字符,以及(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
而不是元素,而是列(column-wise)替换了
apply
(如果愿意,可以使用行更改为
applymap

得到

>>> df

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

在旁观者的眼里是可读的。下面是我要做的:

重新导入
进口大熊猫
df=1.DataFrame(
列=['firstcol'、'secondcol'、'thirdcol'],
数据=['a1',1',a6.1'],['b2',3',b9.3'],['c12',4',c2']
)
df2=(
df.选择类型(exclude='number')
.applymap(lambda x:float(re.sub(r'[^\d.]','',x)))
.join(df.select\u数据类型(include='number'))
.loc[:,df.columns.tolist()]
)