假设这是我的功能:
def function(x):
return x.str.lower()
Run Code Online (Sandbox Code Playgroud)
这是我的 DataFrame (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
Run Code Online (Sandbox Code Playgroud)
我想将该函数仅应用于列B和D. (将它应用于完整的 DataFrame 不是答案,因为它会在数字列中产生 NaN 值)。
这是我的基本想法: df.apply(function, axis=1)
但我无法理解如何选择不同的列来应用该函数。我已经尝试过按数字位置、名称等进行索引的所有方式。
我花了很多时间来阅读这个。这不是以下任何一项的直接副本:
只需从 df 中子选择列,通过忽略axis我们按列操作而不是按行操作的参数,这将非常重要,因为这里的行数多于列数:
df[['B','D']].apply(function)
Run Code Online (Sandbox Code Playgroud)
这将针对每一列运行您的 func
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
Run Code Online (Sandbox Code Playgroud)
您还可以过滤 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
Run Code Online (Sandbox Code Playgroud)
时间安排
按列与按行:
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
Run Code Online (Sandbox Code Playgroud)
然而,对于显着更大的 dfs(按行),第一种方法会更好地扩展
| 归档时间: |
|
| 查看次数: |
7054 次 |
| 最近记录: |