在 pandas 数据帧的列中将 NaN 值更改为 0 时出现问题
Problem with changing NaN values to 0 in a column of a pandas dataframe
我想了解这是如何工作的..
我有这个df。
ticket_id address grafitti_status
0 284932 10041 roseberry, Detroit MI NaN
1 285362 18520 evergreen, Detroit MI NaN
2 285361 18520 evergreen, Detroit MI NaN
3 285338 1835 central, Detroit MI NaN
4 285346 1700 central, Detroit MI NaN
5 285345 1700 central, Detroit MI NaN
哪里
In: df.grafitti_status.unique()
Out: array([nan, 'GRAFFITI TICKET'], dtype=object)
所以我正在尝试将 NaN 更改为 0,将 'GRAFFITI TICKET' 更改为 1。
我用过
df.loc[df['grafitti_status'] == 'GRAFFITI TICKET', 'grafitti_status'] = 1
效果很好,但“0”也一样
df.loc[df['grafitti_status'] == np.nan, 'grafitti_status'] = 0
Out: array([nan, 1], dtype=object)
不起作用,因为 NaN 值仍然存在..
和
df['grafitti_status'] = df['grafitti_status'].replace({np.nan:0,'GRAFFITI TICKET':1},inplace=True)
也不起作用,将所有内容替换为 None。
ticket_id address grafitti_status
0 284932 10041 roseberry, Detroit MI None
1 285362 18520 evergreen, Detroit MI None
2 285361 18520 evergreen, Detroit MI None
3 285338 1835 central, Detroit MI None
4 285346 1700 central, Detroit MI None
5 285345 1700 central, Detroit MI None
6 285347 1700 central, Detroit MI None
任何人都可以告诉我为什么它以这种方式工作吗?
我终于发现我可以用
达到我想要的结果
df.loc[df['grafitti_status'] == 'GRAFFITI TICKET', 'grafitti_status'] = 1
df['grafitti_status'] = df['grafitti_status'].fillna(0)
Out: array([0, 1], dtype=int64)
这会导致以下警告消息。
C:\Users\Maria\Anaconda3\lib\site-packages\pandas\core\indexing.py:543: 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: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
self.obj[item] = s
C:\Users\Maria\Anaconda3\lib\site-packages\ipykernel_launcher.py:3: 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
所以我仍然不确定正确的方法是什么?
自
np.nan==np.nan
会 return 错误
我们有函数isna
df.loc[df['grafitti_status'].isna(), 'grafitti_status'] = 0
我想了解这是如何工作的..
我有这个df。
ticket_id address grafitti_status
0 284932 10041 roseberry, Detroit MI NaN
1 285362 18520 evergreen, Detroit MI NaN
2 285361 18520 evergreen, Detroit MI NaN
3 285338 1835 central, Detroit MI NaN
4 285346 1700 central, Detroit MI NaN
5 285345 1700 central, Detroit MI NaN
哪里
In: df.grafitti_status.unique()
Out: array([nan, 'GRAFFITI TICKET'], dtype=object)
所以我正在尝试将 NaN 更改为 0,将 'GRAFFITI TICKET' 更改为 1。
我用过
df.loc[df['grafitti_status'] == 'GRAFFITI TICKET', 'grafitti_status'] = 1
效果很好,但“0”也一样
df.loc[df['grafitti_status'] == np.nan, 'grafitti_status'] = 0
Out: array([nan, 1], dtype=object)
不起作用,因为 NaN 值仍然存在..
和
df['grafitti_status'] = df['grafitti_status'].replace({np.nan:0,'GRAFFITI TICKET':1},inplace=True)
也不起作用,将所有内容替换为 None。
ticket_id address grafitti_status
0 284932 10041 roseberry, Detroit MI None
1 285362 18520 evergreen, Detroit MI None
2 285361 18520 evergreen, Detroit MI None
3 285338 1835 central, Detroit MI None
4 285346 1700 central, Detroit MI None
5 285345 1700 central, Detroit MI None
6 285347 1700 central, Detroit MI None
任何人都可以告诉我为什么它以这种方式工作吗?
我终于发现我可以用
达到我想要的结果df.loc[df['grafitti_status'] == 'GRAFFITI TICKET', 'grafitti_status'] = 1
df['grafitti_status'] = df['grafitti_status'].fillna(0)
Out: array([0, 1], dtype=int64)
这会导致以下警告消息。
C:\Users\Maria\Anaconda3\lib\site-packages\pandas\core\indexing.py:543: 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: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
self.obj[item] = s
C:\Users\Maria\Anaconda3\lib\site-packages\ipykernel_launcher.py:3: 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
所以我仍然不确定正确的方法是什么?
自
np.nan==np.nan
会 return 错误
我们有函数isna
df.loc[df['grafitti_status'].isna(), 'grafitti_status'] = 0