Python 如何将函数一次应用于数据帧中的多个列
我经常处理格式不好的数据(即数字字段不一致等) 可能还有其他方法,我不知道,但我格式化数据帧中单个列的方法是使用函数并将该列映射到该函数Python 如何将函数一次应用于数据帧中的多个列,python,pandas,filtering,slice,Python,Pandas,Filtering,Slice,我经常处理格式不好的数据(即数字字段不一致等) 可能还有其他方法,我不知道,但我格式化数据帧中单个列的方法是使用函数并将该列映射到该函数 format = df.column_name.map(format_number) 问题:1-如果我有一个包含50列的数据框,并希望将该格式应用于多个列,等等,列1、3、5、7、9 你能去吗 format = df.1,3,5,9.map(format_number) 。。这样我就可以将我所有的数字列格式化为一行了。您可以执行df[[Col1]、[Col
format = df.column_name.map(format_number)
问题:1-如果我有一个包含50列的数据框,并希望将该格式应用于多个列,等等,列1、3、5、7、9
你能去吗
format = df.1,3,5,9.map(format_number)
。。这样我就可以将我所有的数字列格式化为一行了。您可以执行
df[[Col1]、[Col2]、[Col3']]。applymap(格式化数字)
。请注意,这将返回新的列;它不会修改现有的数据帧。如果您想将值放回原始值,您必须执行df[['Col1','Col2','Col3']]=df[['Col1','Col2','Col3']]。applymap(格式编号)
您可以像这样使用apply
:
df.apply(lambda row: format_number(row), axis=1)
您需要在format\u number
函数中指定列:
def format_number(row):
row['Col1'] = doSomething(row['Col1']
row['Col2'] = doSomething(row['Col2'])
row['Col3'] = doSomething(row['Col3'])
这并不像@BrenBarn的回答那么优雅,但它有一个优点,即数据帧已修改到位,因此您无需重新分配列执行此操作时,您是否也可以按编号而不是名称引用列?是否有任何方法可以通过编程方式创建该字符串(该字符串将根据您拥有的列数而变化)并应用format_number函数?也就是说,如果我知道每次工作表中有多少列,上面的方法就行了,但是如果我不知道列的数量,并且想对每一列应用相同的函数,有没有更好的方法呢?@Yoshisery:如果你只想对所有列应用它,只需执行
df.applymap(format\u number)
。你能解释一下它被修改是什么意思吗?我不确定这与上面的解决方案有什么不同,因为我还没有掌握lamda的功能?@Yoshisery忽略了我的代码示例,如果对数据帧执行apply
,则数据帧本身会因函数中的任何更改而修改,因此不需要分配给列,根据函数的操作,您可能仍需要分配。关键是你只需要调用df.apply
,而不需要说dodf[['col1','col2','col3']=df.apply(lambda row:format_number(row),axis=1))
,在我的代码中,赋值是由format_number
函数完成的,所以我猜赋值是隐式的,而不是像BrenBarn的answergreat那样显式的,那么Lamda的功能到底是什么呢?我还没弄明白lamda做什么?@Yoshisery网上有很多文章,比如,和。本质上,它允许您定义匿名函数,这样您就不必定义特殊的函数或表达式。在这种情况下,它捕获该行并将其作为参数传递给格式化_number,它可以很容易地被df.apply(lambda x:x**2)
来平方该值