迭代 Pandas 数据帧的最快方法,同时连接来自多个列的值



我想知道是否有一种性能更高的方法来循环访问 pandas 数据帧并连接不同列中的值。

例如,我有以下工作:

import pandas as pd
from pathlib import Path
data = {'subdir': ['tom', 'phil', 'ava'],
'filename':['9.wav', '8.wav', '7.wav'],
'text':['Pizza','Strawberries and yogurt', 'potato']}
df = pd.DataFrame(data, columns = ['subdir', 'filename', 'text'])
df.head()
example_path = Path(r"C:HelloWorld")
for index, row in df.iterrows():
full_path = example_path.joinpath(row['subdir'], row['filename'])
print(full_path)
text = row['text']
print(text)

输出:

C:HelloWorldtom9.wav
Pizza
C:HelloWorldphil8.wav
Strawberries and yogurt
C:HelloWorldava7.wav
potato

但是,我有大量的行,我想以最快的方式执行此操作。最好的方法是什么?我正在获取路径(子目录和基本文件名(的各个部分,并在循环访问数据帧时将它们连接起来。

我还可能会从其他相邻列(如示例中的"文本"(中获取数据,并在迭代数据帧时存储它们,因此我想找到一种方法一次性完成所有这些操作,因为我将在收集列表或系列(类似结构(中的所有数据后,将这些片段用于输出字典/数据帧对象。

谢谢。

由于您使用的是Path,您可以只执行以下操作:

example_path/df.filename

输出(我的系统是Linux(:

0    C:HelloWorld/9.wav
1    C:HelloWorld/8.wav
2    C:HelloWorld/7.wav
Name: filename, dtype: object

请注意,字符串操作通常不矢量化。上面的代码很可能只是一个for循环的包装器。

你总是可以使用 .apply 方法在 df 中创建一个路径列:

import pandas as pd
import pathlib
data = {'subdir': ['tom', 'phil', 'ava'],
'filename':['9.wav', '8.wav', '7.wav'],
'text':['Pizza','Strawberries and yogurt', 'potato']}
df = pd.DataFrame(data, columns = ['subdir', 'filename', 'text'])

df["path"] = df[['subdir','filename']].apply(
lambda x:pathlib.Path(
r"C:HelloWorld{}{}".format(
x['subdir'],x['filename']
)
),
axis=1
)
print(df[['path','text']])

外:

path                     text
0   C:HelloWorldtom9.wav                    Pizza
1  C:HelloWorldphil8.wav  Strawberries and yogurt
2   C:HelloWorldava7.wav                   potato

最新更新