Data Wrangling

Pandas高手进阶:五种高效文本列合并方法

Spread the love

高效合并文本列是数据处理中的关键任务。本文介绍了五种有效的Pandas方法,用于连接DataFrame中的字符串列,并重点介绍了它们的优缺点,以指导您选择最适合您特定需求的方法。

目录:

加号运算符方法

这种直接的方法使用Python内置的+运算符进行字符串连接。对于简单的场景,它通常最快,但需要仔细处理缺失值(NaN),以避免TypeError异常。


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df['col1'].fillna('') + df['col2'].fillna('')
print(df)

输出:


  col1 col2 combined
0    A    D      AD
1    B    E      BE
2    C    F      CF
3  NaN    G       G

Series.str.cat()方法

Series.str.cat()专为字符串连接而设计,可以高效地处理缺失数据。它允许使用分隔符和NaN表示进行自定义。


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df['col1'].str.cat(df['col2'], sep='-', na_rep='')
print(df)

输出:


  col1 col2 combined
0    A    D      A-D
1    B    E      B-E
2    C    F      C-F
3  NaN    G      -G

df.apply()方法

df.apply()提供了对行(axis=1)或列(axis=0)操作的灵活性,可以实现复杂的连接逻辑。但是,对于大型DataFrame,它的效率可能低于+运算符。


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df.apply(lambda row: str(row['col1']) + ' ' + str(row['col2']), axis=1)
print(df)

输出:


  col1 col2 combined
0    A    D      A D
1    B    E      B E
2    C    F      C F
3  NaN    G    nan G

Series.map()方法

Series.map()提供了一种灵活的方式来应用自定义函数进行连接,处理各种场景,例如条件逻辑或特定分隔符。它对于更复杂的连接规则特别有用。


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

def combine_strings(x):
  return str(x[0]) + '_' + str(x[1])

df['combined'] = df[['col1', 'col2']].apply(combine_strings, axis=1)
print(df)

输出:


  col1 col2 combined
0    A    D      A_D
1    B    E      B_E
2    C    F      C_F
3  NaN    G    nan_G

df.agg()方法

虽然主要用于聚合,但df.agg()可以用于字符串连接。但是,对于此特定目的,它通常不如其他方法高效。


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df.agg(lambda x: str(x['col1']) + ' ' + str(x['col2']), axis=1)
print(df)

输出(类似于df.apply()):


  col1 col2 combined
0    A    D      A D
1    B    E      B E
2    C    F      C F
3  NaN    G    nan G

结论:最佳方法取决于您的特定需求和数据集大小。对于基本的连接,+运算符速度很快。Series.str.cat()在高效处理缺失值方面表现出色。Series.map()df.apply()为复杂场景提供了更大的灵活性,而df.agg()对于此任务效率较低。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注