假设这是我的功能:
def function(x):
return x.str.lower()
这是我的数据框(df)
A B C D
0 1.67430 BAR 0.34380 FOO
1 2.16323 FOO -2.04643 BAR
2 0.19911 BAR -0.45805 FOO
3 0.91864 BAR -0.00718 BAR
4 1.33683 FOO 0.53429 FOO
5 0.97684 BAR -0.77363 BAR
我想将该函数仅应用于列B
and D
。 (将其应用于完整的 DataFrame 并不是答案,因为这会在数字列中产生 NaN 值)。
这是我的基本想法:df.apply(function, axis=1)
但我无法理解如何选择不同的列来应用该函数。我已经尝试过按数字位置、名称等进行索引的各种方式。
我花了相当多的时间阅读这方面的内容。这不是以下任何一个的直接重复:
如何将函数应用于 Pandas 数据框的两列
Pandas:如何对多列使用应用函数
Pandas:将不同的函数应用于不同的列
Python Pandas:使用“apply”将 1 个函数应用于多列
只需从 df 中子选择列,忽略axis
参数我们按列操作而不是按行操作,这将很重要,因为这里的行多于列:
df[['B','D']].apply(function)
这将针对每一列运行您的函数
In [186]:
df[['B','D']].apply(function)
Out[186]:
B D
0 bar foo
1 foo bar
2 bar foo
3 bar bar
4 foo foo
5 bar bar
您还可以过滤 df 以仅获取字符串 dtype 列:
In [189]:
df.select_dtypes(include=['object']).apply(function)
Out[189]:
B D
0 bar foo
1 foo bar
2 bar foo
3 bar bar
4 foo foo
5 bar bar
Timings
列式与行式:
In [194]:
%timeit df.select_dtypes(include=['object']).apply(function, axis=1)
%timeit df.select_dtypes(include=['object']).apply(function)
100 loops, best of 3: 3.42 ms per loop
100 loops, best of 3: 2.37 ms per loop
然而,对于更大的 dfs(按行),第一种方法的扩展性会更好
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)