次のdataframeのtimestamp列に操作をしました。
’秒’以下を切り捨て、元のdataframeに代入する操作です。
id | val | timestamp |
---|---|---|
1 | 100 | 2022-03-04 20:58:08.510000+00:00 |
2 | 200 | 2022-03-04 20:58:51.283000+00:00 |
3 | 300 | 2022-03-04 20:58:54.157000+00:00 |
以下の形になり、結果は正しいのですが、警告が消えません。
id | val | timestamp |
---|---|---|
1 | 100 | 2022-03-04 20:58:00+00:00 |
2 | 200 | 2022-03-04 20:58:00+00:00 |
3 | 300 | 2022-03-04 20:58:00+00:00 |
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-
docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df['timestamp'] = df['timestamp'].map(lambda x:x.replace(second=0 , microsecond=0))
コードは、上記警告にもあるように以下の通りです。
timestamp列はdatetime型です。
Python
1df['timestamp'] = df['timestamp'].map(lambda x:x.replace(second=0 , microsecond=0)
mapを使って関数を列全体に適用する場合、この代入で良いと思っていたのですが、この書式ではスライスのコピーに代入することになるのでしょうか。代替策も思いつかず、質問いたしました。
どのようなコードが作法として正しいのでしょうか。
回答1件
あなたの回答
tips
プレビュー