English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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()功能,这也是对系列和数据帧的对象的方法-
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
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将被视为零 如果数据均为不适用,则结果为不适用
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
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”替换为“ 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
في هذا السياق، نملأ القيم بالصفر؛ ومع ذلك، يمكننا أيضًا ملء أي قيمة أخرى.
استخدم مفهوم الملء الذي تم مناقشته في فصل 'إعادة الت索引' لملء القيم المفقودة.
الطريقة | العملية |
pad/fill | ملء للأمام< |
bfill/backfill | ملء للخلف |
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
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 في صف ما ستجعل الصف بأكمله مفقودًا.
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
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.
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
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