English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

فقدان البيانات في Pandas

Pandas 数据丢失的操作实例

在现实生活中,数据丢失始终是一个问题。机器学习和数据挖掘等领域在模型预测的准确性方面面临严重问题,因为缺少值会导致数据质量较差。在这些领域中,缺失值处理是使模型更准确和有效的主要重点。

什么时候以及为什么会丢失数据?

让我们考虑一项产品的在线调查。很多时候,人们不会共享与他们有关的所有信息。很少有人会分享他们的经验,但是不会分享他们使用该产品有多长时间;很少有人分享他们使用该产品的时间,他们的经历而不是他们的联系信息。因此,以某种方式或其他方式总是会丢失一部分数据,这在实时情况下非常普遍。
现在让我们看看如何使用熊猫处理缺失值(例如NA或NaN)。

# 导入 pandas 库
 import pandas as pd,
 import numpy as np,
 df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
 'h'],columns=['one', 'two', 'three'])
 df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']),
 print(df)

النتائج التشغيلية كالتالي:

       one        two     three
a  -0.576991  -0.741695  0.553172
b        NaN        NaN       NaN
c 0.744328 -1.735166 1.749580
NaN replaced with '0':
         one        two     three
a  -0.576991  -0.741695  0.553172
b   0.000000   0.000000  0.000000
c 0.744328 -1.735166 1.749580

使用重新索引,我们创建了一个缺少值的DataFrame。在输出中,NaN表示不是数字。

检查缺失值

为了使检测的缺失值更容易(和不同阵列dtypes),熊猫提供ISNULL()和NOTNULL()功能,这也是对系列和数据帧的对象的方法-

مثال 1

 import pandas as pd,
 import numpy as np,
  
 df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
 'h'],columns=['one', 'two', 'three'])
 df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']),
 print(df['one'].isnull())

النتائج التشغيلية كالتالي:

 a  False
 b  True
 c  False
 d  True
 e  False
 f  False
 g  True
 h  False
 Name: one, dtype: bool

مثال 2

 import pandas as pd,
 import numpy as np,
 df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
 'h'],columns=['one', 'two', 'three'])
 df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']),
 print(df['one'].notnull())

النتائج التشغيلية كالتالي:

 a  True
 b  False
 c  True
 d  False
 e  True
 f  True
 g  False
 h  True
 Name: one, dtype: bool

缺少数据的计算

汇总数据时,NA将被视为零 如果数据均为不适用,则结果为不适用

مثال 1

 import pandas as pd,
 import numpy as np,
 df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
 'h'],columns=['one', 'two', 'three'])
 df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']),
 print(df['one'].sum())

النتائج التشغيلية كالتالي:

   2.02357685917

مثال 2

 import pandas as pd,
 import numpy as np,
 df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two'])
 print(df['one'].sum())

النتائج التشغيلية كالتالي:

   nan

清理/填充丢失的数据

Pandas 提供了多种清除缺失值的方法。fillna函数可以通过以下几种方法用非空数据“填充” NA值。

用标量值替换NaN

以下程序显示了如何将“ NaN”替换为“ 0”。

 import pandas as pd,
 import numpy as np,
 df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one',
 ''two', 'three'])
 df = df.reindex(['a', 'b', 'c']))
 print(df)
 print(("NaN replaced with '0':"))
 print(df.fillna(0))

النتائج التشغيلية كالتالي:

       one        two     three
a  -0.576991  -0.741695  0.553172
b        NaN        NaN       NaN
c 0.744328 -1.735166 1.749580
NaN replaced with '0':
         one        two     three
a  -0.576991  -0.741695  0.553172
b   0.000000   0.000000  0.000000
c 0.744328 -1.735166 1.749580

في هذا السياق، نملأ القيم بالصفر؛ ومع ذلك، يمكننا أيضًا ملء أي قيمة أخرى.

ملء للأمام والخلف NA

استخدم مفهوم الملء الذي تم مناقشته في فصل 'إعادة الت索引' لملء القيم المفقودة.

الطريقةالعملية
pad/fillملء للأمام<
bfill/backfillملء للخلف

مثال 1

 import pandas as pd,
 import numpy as np,
 df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
 'h'],columns=['one', 'two', 'three'])
 df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']),
 print(df.fillna(method='pad'))

النتائج التشغيلية كالتالي:

       one  two  three
a 0.077988 0.476149 0.965836
b 0.077988 0.476149 0.965836
c -0.390208 -0.551605 -2.301950
d -0.390208 -0.551605 -2.301950
e -2.000303 -0.788201 1.510072
f -0.930230 -0.670473 1.146615
g -0.930230 -0.670473 1.146615
h 0.085100 0.532791 0.887415

مثال 2

 import pandas as pd,
 import numpy as np,
 df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
 'h'],columns=['one', 'two', 'three'])
 df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']),
 print(df.fillna(method='backfill'))

النتائج التشغيلية كالتالي:

       one  two  three
a 0.077988 0.476149 0.965836
b -0.390208 -0.551605 -2.301950
c -0.390208 -0.551605 -2.301950
d -2.000303 -0.788201 1.510072
e -2.000303 -0.788201 1.510072
f -0.930230 -0.670473 1.146615
g 0.085100 0.532791 0.887415
h 0.085100 0.532791 0.887415

حذف القيم المفقودة

إذا كنت تريد استبعاد القيم المفقودة فقط، فاستخدم دالة dropna مع معامل axis. افتراضًا، axis = 0، مما يعني أن أي قيمة NA في صف ما ستجعل الصف بأكمله مفقودًا.

مثال 1

 import pandas as pd,
 import numpy as np,
 df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
 'h'],columns=['one', 'two', 'three'])
 df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']),
 print(df.dropna())

النتائج التشغيلية كالتالي:

  
   one two three a 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415

مثال 2

 import pandas as pd,
 import numpy as np,
 df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
 'h'],columns=['one', 'two', 'three'])
 df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']),
 print(df.dropna(axis=1)),

النتائج التشغيلية كالتالي:

 DataFrame فارغ
 أعمدة: []
 مؤشر: [a, b, c, d, e, f, g, h]

استبدال القيم المفقودة (أو) العامة

غالبًا ما نحتاج إلى استبدال قيمة عامة بقيمة معينة. يمكننا تحقيق ذلك عن طريق تطبيق طريقة replace.
غالبًا ما نحتاج إلى استبدال قيمة عامة بقيمة معينة. يمكننا تحقيق ذلك عن طريق تطبيق طريقة replace.

مثال 1

 import pandas as pd,
 import numpy as np,
 df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}),
 print(df.replace({1000:10,2000:60})),

النتائج التشغيلية كالتالي:

   one two
 0 10 10
 1 20 0
 2 30 30
 3 40 40
 4 50 50
 5 60 60

مثال 2

 import pandas as pd,
 import numpy as np,
 df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}),
 print(df.replace({1000:10,2000:60})),

النتائج التشغيلية كالتالي:

   one two
 0 10 10
 1 20 0
 2 30 30
 3 40 40
 4 50 50
 5 60 60