在Pandas中,从列中删除NaN值后,删除NaN值的索引中存储的值是什么?我能够成功地从列中删除NaN值,但df的形状完好无损,但该特定列的大小已更改。
1445 70.0
**1446 NaN**
1447 80.0
1448 70.0
1449 21.0
1450 60.0
1451 78.0
1452 35.0
1453 90.0
1454 62.0
1455 62.0
1456 85.0
1457 66.0
1458 68.0
1459 75.0
Name: LotFrontage, dtype: float64
Size of LotFrontage before removing NaN values: 1460
这是删除NaN值后得到的结果
1444 63.0
1445 70.0
1447 80.0
1448 70.0
1449 21.0
1450 60.0
1451 78.0
1452 35.0
1453 90.0
1454 62.0
1455 62.0
1456 85.0
1457 66.0
1458 68.0
1459 75.0
Name: LotFrontage, dtype: float64
New size of LotFrontage after removing NaN values: 1201
尝试分配索引1446的值时出现以下错误:
[在此处输入图片描述] [1]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-70-7cb9d14fb3e0> in <module>()
3 print("New size of LotFrontage after revoving NaN values: " + str(iowa['LotFrontage'].size))
4 print(iowa['LotFrontage'][1445])
----> 5 print(iowa['LotFrontage'][1446])
1 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/indexes/base.py in get_value(self, series, key)
4403 k = self._convert_scalar_indexer(k, kind="getitem")
4404 try:
-> 4405 return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))
4406 except KeyError as e1:
4407 if len(self) > 0 and (self.holds_integer() or self.is_boolean()):
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()
KeyError: 1446
答案 0 :(得分:0)
第一列,它只是一个索引。您应该在删除一些值后重置索引。 (如果要查看旧索引或将旧索引添加到数据框中,请设置drop = False。否则,它将删除旧索引)
df2 = df2.reset_index(drop=True)
删除某些值后,您的数据帧仅包含1201行,因此1446处不再有行。这就是为什么您收到KeyError:1446
的原因答案 1 :(得分:0)
我假设您必须使用“ dropna”功能删除NaN值。您可以使用“ dropna”功能删除各种方式。默认情况下,它按行逐行删除,如果该行中的任何列的值为“ NaN”,则逐行删除。您可以通过设置各种参数来更改此行为,如here所示。
当放置行时,形状肯定会改变。在这种情况下,形状一定不能更改,因为您没有“就位”。无需将“ inplace”设置为“ True”,“ dropna”功能将返回您删除的数据框,而不是在原始数据框中进行更改。
如果删除索引是理想的行为,请使用dropna之一:
df_final = df.dropna()
or
df.dropna(inplace=True)
如果您的数据框中有多个列,并且只想在所有列都具有NaN时删除行,请使用:
df_final = df.dropna(how='all')
or
df.dropna(how='all', inplace=True)
如果您只有一列并希望保护索引,则可以尝试将NaN值替换为合适的值,例如:
df_final = df.fillna(0)
or
df.fillna(value=0, inplace=True)
有关“ fillna”的更多信息,您可以参考此link。