我有一些数据框,这些数据框在某些列中混合使用这种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列,而是所有数百列。
答案 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