使用自定义功能将熊猫数据库中的许多列解析/拆分为多列

时间:2019-07-26 15:36:56

标签: python pandas dataframe parsing split

我已经查阅了很多以前的相关SO帖子,但是我无法适应它们来解决我的问题。

这是一个示例数据框。

# Using pandas 0.24.2
data = {'customer_id': [1, 2, 3],
        'prev_due_date':['Jun-2010', 'Apr-2019', 'Dec-1999'], 
        'current_due_date':['Aug-2019', 'Dec-2045', 'Jan-2000'],
        'next_due_date':['Feb-2025', 'Nov-2065', 'Sep-2001']
       } 

df = pd.DataFrame(data) 

这是数据框的外观,在实际数据框中还有更多此类列要解析,因此是我的问题。

    customer_id prev_due_date   current_due_date    next_due_date
0   1           Jun-2010        Aug-2019            Feb-2025
1   2           Apr-2019        Dec-2045            Nov-2065
2   3           Dec-1999        Jan-2000            Sep-2001

我创建了一个解析一列的函数(即,这将为提供的df添加两个已解析的列---月和年列---)

def parse_column(df, col_parse):

    col_parse_mmm = col_parse + '_mmm'
    col_parse_yyyy = col_parse + '_yyyy'

    df[[col_parse_mmm, col_parse_yyyy]] = df[col_parse].str.split('-', expand=True)

    return df

在下面调用此函数可以完成提供的列的工作:

parse_column(df, 'prev_due_date')

现在,我的问题是:

  1. 如何使用 apply 对我选择的任意数量的列(例如,要解析的数十或数百列的列表)执行此操作strong>?

  2. 是否可以避免使用 apply

1 个答案:

答案 0 :(得分:1)

for c in df.columns:
    if c.endswith('_date'):
        parse_column(df, c)

(您无需在parse_column函数中返回df)

如果您已经有了感兴趣的列名列表:

for c in my_columns_list:
    parse_column(df, c)

您不需要任何apply