在python中处理数据集中缺少的值

在python中处理数据集中缺少的值,python,pandas,data-cleaning,Python,Pandas,Data Cleaning,如何在数据集中选择是删除NaN值还是用均值(或中位数)填充?还有什么其他技术可以清除数据集中缺失的值? 让数据为数字。(在python中)它始终取决于数据集和缺失值的百分比 对于少部分缺失值,删除NaN值是可接受的解决方案。如果该百分比不可忽略,则强烈建议删除NaN。 然后填充类型取决于数据的类型。若缺少的值应该在已知的小范围内,那个么可以用其他值的平均值填充。例如,如果您的数据集包含学校学生的年龄(但其中许多值缺失),则平均值不应为某些分析带来问题。 另一方面,如果有一系列时间缓慢的递增测量值

如何在数据集中选择是删除NaN值还是用均值(或中位数)填充?还有什么其他技术可以清除数据集中缺失的值?
让数据为数字。(在python中)

它始终取决于数据集和缺失值的百分比

对于少部分缺失值,删除
NaN
值是可接受的解决方案。如果该百分比不可忽略,则强烈建议删除
NaN
。 然后填充类型取决于数据的类型。若缺少的值应该在已知的小范围内,那个么可以用其他值的平均值填充。例如,如果您的数据集包含学校学生的年龄(但其中许多值缺失),则平均值不应为某些分析带来问题。 另一方面,如果有一系列时间缓慢的递增测量值,可以考虑用正向或反向填充替换
NaN
值。 例如,在下面的情况下,
df.fillna(method='ffill')
应该优于
df.fillna(df.mean())

但在另一个例子中,用平均值替换可能更好:

             Age    Class
StudentA    15.3       10   
StudentB    16.1       10
StudentC    15.5        9
StudentD     NaN       10
StudentE    16.0       10

同样,没有一般规则,但这取决于您的数据集和您必须进行的分析。

没有处理缺失数据的特定规则。但是,您可能需要考虑以下几点:

1.如果某列的数据缺少的值超过70%,则可能需要删除该列。 2.如果列数据的分布本质上是对称的,则可以考虑用均值替换缺失值: 或者,您可以将数据分组并使用分组平均值: 3.如果该列的数据被歪斜,可以考虑使用中值来填充缺失值。(将上述命令中的“平均值”替换为“中值”)。 4.或者,您也可以研究一种无监督的方法,如集群。在这里,一旦对数据进行了集群,就可以使用集群的模式值或平均值,并相应地替换丢失的数据。
希望这有帮助。

您是在询问熊猫数据帧吗?你的问题要求你进行一些研究,例如,如果缺失的值完全不相关怎么办?考虑泰坦尼克数据集中的“舱”栏中的“南”值。如果
NaN
完全不相关,您可以决定用任何数字填充,甚至删除整个列。特别是如果你正在做一些机器学习练习,你不需要所有的专栏。
             Age    Class
StudentA    15.3       10   
StudentB    16.1       10
StudentC    15.5        9
StudentD     NaN       10
StudentE    16.0       10
test = pd.DataFrame({'A': [1, 2, np.nan, 3, 4, 7, 11], 'B': [1, 4, 5, 7, 12, 45, 6], 'Group':['c', 'd', 'd', 'c', 'd', 'c', 'd']})

test
    A       B   Group
0   1.0     1   c
1   2.0     4   d
2   NaN     5   d
3   3.0     7   c
4   4.0     12  d
5   7.0     45  c
6   11.0    6   d

test['A'].fillna(test['A'].mean(), inplace=True)

test
    A           B   Group
0   1.000000    1   c
1   2.000000    4   d
2   4.666667    5   d
3   3.000000    7   c
4   4.000000    12  d
5   7.000000    45  c
6   11.000000   6   d
test['A'].fillna(test.groupby('Group')['A'].transform('mean'), inplace=True)
test
    A           B   Group
0   1.000000    1   c
1   2.000000    4   d
2   5.666667    5   d
3   3.000000    7   c
4   4.000000    12  d
5   7.000000    45  c
6   11.000000   6   d