Nig*_*ker 8 python dataframe pandas
我收到以下警告:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
Run Code Online (Sandbox Code Playgroud)
在以下行:
df3[['prod_tags_0', 'prod_tags_1', 'prod_tags_2', 'prod_tags_3']].fillna(0, inplace=True)
Run Code Online (Sandbox Code Playgroud)
我怎么能解决这个警告?
Dee*_*ace 10
df3[['prod_tags_0', 'prod_tags_1', 'prod_tags_2', 'prod_tags_3']]
创建一个新的数据帧,它是一个子集df3
.因为你正在使用inplace=True
你正在获得上述警告,因为它试图修改新的数据框架,你没有保留参考(我怀疑如果你打印df3
你会看到这条线实际上没有效果).
我会做以下其中一项:
重新分配新创建的数据帧,df3
而不使用inplace=True
:
df3[['prod_tags_0', 'prod_tags_1', 'prod_tags_2', 'prod_tags_3']] = \
df3[['prod_tags_0', 'prod_tags_1', 'prod_tags_2', 'prod_tags_3']].fillna(0)
Run Code Online (Sandbox Code Playgroud)或者稍微偏好的方式(至少在我看来):
fillna
将要修改的列作为字典传递.键是列的名称,值是NaN
每列中应替换的值:
df3.fillna({'prod_tags_0': 0, 'prod_tags_1': 0,
'prod_tags_2': 0, 'prod_tags_3': 0}, inplace=True)
Run Code Online (Sandbox Code Playgroud)
在此示例中,您可以使用字典理解:
import pandas as pd
import numpy as np
df = pd.DataFrame({'prod_tags_0': [np.nan], 'prod_tags_1': [np.nan],
'prod_tags_2': [np.nan]})
print(df)
>> prod_tags_0 prod_tags_1 prod_tags_2
0 NaN NaN NaN
df.fillna({'prod_tags_' + str(i): 0 for i in range(2)}, inplace=True)
print(df)
>> prod_tags_0 prod_tags_1 prod_tags_2
0 0.0 0.0 NaN
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
3292 次 |
最近记录: |