データフレームにいくつかの列があり、日付の部分を保持し、時間の部分を削除するだけです。これらの列のリストを作成しました。
list_of_cols_to_change = ['col1','col2','col3','col4']
これを行うための関数を作成しました。列のリストを受け取り、リスト内の各列にdt.dateを適用します。
def datefunc(x):
for column in x:
df[column] = df[column].dt.date
次に、リストをパラメーターとして渡してこの関数を呼び出します。
datefunc(list_of_cols_to_change )
Map()のようなものを使用してこれを達成したいと思います。基本的に、列をパラメーターとして受け取り、それに変更を加える関数を使用します。次に、map()を使用して、この関数を使用している列のリストに適用します。このようなもの:
def datefunc_new(column):
df[column] = df[column].dt.date
map(datefunc_new,list_of_cols_to_change)
ただし、これは機能しません。どうすればこの作品を作ることができますか?
最も簡単なのは、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
私はあなたがすでに解決策を持っていると思う、あなたのdatefunc_new関数にパラメータとしてcolumn
を追加するだけ:
def datefunc_new(column):
df[column] = df[column].dt.date
map(datefunc_new, list_of_cols_to_change)
あなたの特定の例のために、より多くのpandasのようなコードを使用することもできます:
def to_date(series):
return series.dt.date
df[list_of_cols_to_change] = df[list_of_cols_to_change].apply(to_date)