使用pd.Dataframe.replace和apply函数作为替换值

时间:2019-03-14 23:09:38

标签: python pandas dataframe

我有一些数据框,这些数据框在某些列中混合使用这种ASP.NET格式“ / Date(1239018869048)/”来显示日期。我想出了如何将其解析为python的datetime格式的给定列。但是,我想将此逻辑放入函数中,以便可以将其传递给任何数据框,并使用pd.Dataframe.replace将其替换为与正则表达式匹配的所有日期。

类似:

def pretty_dates():
    #Messy logic here

df.replace(to_replace=r'\/Date(d+)', value=pretty_dates(df), regex=True)

问题在于传递给pretty_dates的df是整个数据帧,而不仅仅是需要替换的单元格。

所以我要弄清楚的概念是,是否有一种方法可以使使用df.replace时应替换的值可以是函数而不是静态值。

非常感谢您

EDIT 为了增加清晰度,我在一个数据框中有许多列,其中有一百多个包含此日期格式。我不想列出每个有日期的列。有没有一种方法可以在数据集中的所有列上应用清除日期的功能?因此,我不想清除数据框中的1列,而是所有数百列。

2 个答案:

答案 0 :(得分:0)

我确定您可以使用regex一步完成此操作,但这是如何立即将其应用于整个列:

df = pd.Series(['/Date(1239018869048)/',
                '/Date(1239018869048)/'],dtype=str)

df = df.str.replace('\/Date\(', '')
df = df.str.replace('\)\/', '')
print(df)

    0    1239018869048
    1    1239018869048
    dtype: object

答案 1 :(得分:0)

据我了解,您需要将自定义函数应用于指定列中的选定单元格。希望以下示例对您有所帮助:

import pandas as pd

df = pd.DataFrame({'x': ['one', 'two', 'three']})
selection = df.x.str.contains('t', regex=True) # put your regexp here
df.loc[selection, 'x'] = df.loc[selection, 'x'].map(lambda x: x+x) # do some logic instead

您可以将此过程循环应用于df的所有列:

for col in df.columns:
    selection = df.loc[:, col].str.contains('t', regex=True) # put your regexp here
    df.loc[selection, col] = df.loc[selection, col].map(lambda x: x+x) # do some logic instead