对pandas数据框中的列使用map()

Vis*_*tav 13 python list pandas

我的数据框中有一些列,我只想保留日期部分并删除时间部分.我已经列出了这些列:

list_of_cols_to_change = ['col1','col2','col3','col4']
Run Code Online (Sandbox Code Playgroud)

我写了一个这样做的功能.它采用列列表并将dt.date应用于列表中的每个列.

def datefunc(x):
    for column in x:
        df[column] = df[column].dt.date
Run Code Online (Sandbox Code Playgroud)

然后我调用此函数将列表作为参数传递:

datefunc(list_of_cols_to_change )
Run Code Online (Sandbox Code Playgroud)

我想用map()之类的东西来完成这个.基本上使用一个函数,它将列作为参数并对其进行更改.然后我想使用map()将此函数应用于我的列列表.像这样的东西:

def datefunc_new(column):
    df[column] = df[column].dt.date

map(datefunc_new,list_of_cols_to_change)
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我怎样才能做到这一点?

jez*_*ael 14

最简单的是使用lambda函数apply:

df = pd.DataFrame({'col1':pd.date_range('2015-01-02 15:00:07', periods=3),
                   'col2':pd.date_range('2015-05-02 15:00:07', periods=3),
                   'col3':pd.date_range('2015-04-02 15:00:07', periods=3),
                   'col4':pd.date_range('2015-09-02 15:00:07', periods=3),
                   'col5':[5,3,6],
                   'col6':[7,4,3]})

print (df)
                 col1                col2                col3  \
0 2015-01-02 15:00:07 2015-05-02 15:00:07 2015-04-02 15:00:07   
1 2015-01-03 15:00:07 2015-05-03 15:00:07 2015-04-03 15:00:07   
2 2015-01-04 15:00:07 2015-05-04 15:00:07 2015-04-04 15:00:07   

                 col4  col5  col6  
0 2015-09-02 15:00:07     5     7  
1 2015-09-03 15:00:07     3     4  
2 2015-09-04 15:00:07     6     3  

list_of_cols_to_change = ['col1','col2','col3','col4']
df[list_of_cols_to_change] = df[list_of_cols_to_change].apply(lambda x: x.dt.date)
print (df)
         col1        col2        col3        col4  col5  col6
0  2015-01-02  2015-05-02  2015-04-02  2015-09-02     5     7
1  2015-01-03  2015-05-03  2015-04-03  2015-09-03     3     4
2  2015-01-04  2015-05-04  2015-04-04  2015-09-04     6     3
Run Code Online (Sandbox Code Playgroud)


pan*_*sen 5

我认为您已经有了解决方案,只需将其column作为参数添加到您的datefunc_new函数中即可:

def datefunc_new(column):
    df[column] = df[column].dt.date

map(datefunc_new, list_of_cols_to_change)
Run Code Online (Sandbox Code Playgroud)

您还可以为您的特定示例使用更多类似熊猫的代码:

def to_date(series):
    return series.dt.date

df[list_of_cols_to_change] = df[list_of_cols_to_change].apply(to_date)
Run Code Online (Sandbox Code Playgroud)