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)
我认为您已经有了解决方案,只需将其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)