I try to delete
some column and convert some value in column with
df2.drop(df2.columns[[0, 1, 3]], axis=1, inplace=True)
df2['date'] = df2['date'].map(lambda x: str(x)[1:])
df2['date'] = df2['date'].str.replace(':', ' ', 1)
df2['date'] = pd.to_datetime(df2['date'])
and to all this string I get
df2.drop(df2.columns[[0, 1, 3]], axis=1, inplace=True)
C:/Users/����� �����������/Desktop/projects/youtube_log/filter.py:11: 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
What is problem there?
Generally, to avoid a SettingWithCopyWarning in Pandas, you should do the following: Avoid chained assignments that combine two or more indexing operations like df["z"][mask] = 0 and df. loc[mask]["z"] = 0 . Apply single assignments with just one indexing operation like df.
SettingWithCopyWarning is a warning which means that your code may still be functional. However, it's important not to ignore it but instead, understand why it has been raised in the first place. This way it will be much easier for you to adjust your code accordingly so that the warning is no longer raised.
The isin() method checks if the Dataframe contains the specified value(s). It returns a DataFrame similar to the original DataFrame, but the original values have been replaced with True if the value was one of the specified values, otherwise False .
How to Fix the KeyError? We can simply fix the error by correcting the spelling of the key. If we are not sure about the spelling we can simply print the list of all column names and crosscheck.
Your df2
is a slice of another dataframe. You need to explicitly copy it with df2 = df2.copy()
just prior to your attempt to drop
Consider the following dataframe:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.arange(20).reshape(4, 5), list('abcd'), list('ABCDE'))
df1
Let me assign a slice of df1
to df2
df2 = df1[['A', 'C']]
df2
is now a slice of df1
and should trigger those pesky SettingWithCopyWarning
's if we try to change things in df2
. Let's take a look.
df2.drop('c')
No problems. How about:
df2.drop('c', inplace=True)
There it is:
The problem is that pandas tries to be efficient and tracks that df2
is pointing to the same data as df1
. It is preserving that relationship. The warning is telling you that you shouldn't be trying to mess with the original dataframe via the slice.
Notice that when we look at df2
, row 'c' has been dropped.
df2
And looking at df1
we see that row 'c' is still there.
df1
pandas made a copy of df2
then dropped row 'c'. This is potentially inconsistent with what our intent may have been considering we made df2
a slice of and pointing to same data as df1
. So pandas is warning us.
To not see the warning, make the copy yourself.
df2 = df2.copy()
# or
df2 = df1[['A', 'C']].copy()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With