做网站 还是淘宝店,wordpress分类链接后加,网站建设与推广综合实训报告册,东莞规划局数据删减
虽然我们可以通过数据选择方法从一个完整的数据集中拿到我们需要的数据#xff0c;但有的时候直接删除不需要的数据更加简单直接。Pandas 中#xff0c;以 .drop 开头的方法都与数据删减有关。
DataFrame.drop 可以直接去掉数据集中指定的列和行。一般在使用时但有的时候直接删除不需要的数据更加简单直接。Pandas 中以 .drop 开头的方法都与数据删减有关。
DataFrame.drop 可以直接去掉数据集中指定的列和行。一般在使用时我们指定 labels 标签参数然后再通过 axis 指定按列或按行删除即可。当然你也可以通过索引参数删除数据具体查看官方文档。
axis0 或 axisindex删除行。这是默认设置。axis1 或 axiscolumns删除列。
df.drop(labels[Median Age, Total Males], axis1)DataFrame.drop_duplicates 则通常用于数据去重即剔除数据集中的重复值。使用方法非常简单默认情况下它会根据所有列删除重复的行。也可以使用 subset 指定要删除的特定列上的重复项要删除重复项并保留最后一次出现请使用 keep‘last’。
一个删除列的例子
在 Pandas 中删除 DataFrame 的列通常通过指定列的名称来完成。你不需要直接写列数索引而是使用列的名称。例如如果你的 DataFrame 是这样的
import pandas as pddata {A: [1, 2, 3], B: [4, 5, 6], C: [7, 8, 9]}
df pd.DataFrame(data)现在假设你想删除列 B你可以这样做
df df.drop(B, axis1)这里 B 是列的名称axis1 指定了你想删除的是列而不是行行是 axis0。这种方法避免了直接使用列的数值索引使代码更加清晰易懂。
[DataFrame.drop_duplicates] 则通常用于数据去重即剔除数据集中的重复值。使用方法非常简单默认情况下它会根据所有列删除重复的行。也可以使用 subset 指定要删除的特定列上的重复项要删除重复项并保留最后一次出现请使用 keep‘last’。
除此之外另一个用于数据删减的方法 [DataFrame.dropna] 也十分常用其主要的用途是删除缺少值即数据集中空缺的数据列或行。
数据填充
既然提到了数据删减反之则可能会遇到数据填充的情况。而对于一个给定的数据集而言我们一般不会乱填数据而更多的是对缺失值进行填充。
在真实的生产环境中我们需要处理的数据文件往往没有想象中的那么美好。其中很大几率会遇到的情况就是缺失值。缺失值主要是指数据丢失的现象也就是数据集中的某一块数据不存在。除此之外、存在但明显不正确的数据也被归为缺失值一类。例如在一个时间序列数据集中某一段数据突然发生了时间流错乱那么这一小块数据就是毫无意义的可以被归为缺失值。
检测缺失值
Pandas 为了更方便地检测缺失值将不同类型数据的缺失均采用 NaN 标记。这里的 NaN 代表 Not a Number它仅仅是作为一个标记。例外是在时间序列里时间戳的丢失采用 NaT 标记。
Pandas 中用于检测缺失值主要用到两个方法分别是isna() 和 notna()故名思意就是「是缺失值」和「不是缺失值」。默认会返回布尔值用于判断。
接下来我们人为生成一组包含缺失值的示例数据。
df pd.DataFrame(np.random.rand(9, 5), columnslist(ABCDE))
# 插入 T 列并打上时间戳
df.insert(valuepd.Timestamp(2017-10-1), loc0, columnTime)
# 将 1, 3, 5 列的 2468 行置为缺失值
df.iloc[[1, 3, 5, 7], [0, 2, 4]] np.nan
# 将 2, 4, 6 列的 3579 行置为缺失值
df.iloc[[2, 4, 6, 8], [1, 3, 5]] np.nan
dfTimeABCDE02017-10-010.6049150.2057690.2655890.1336210.3486931NaT0.731832NaN0.110929NaN0.43082722017-10-01NaN0.243280NaN0.927472NaN3NaT0.514475NaN0.616544NaN0.31433242017-10-01NaN0.951334NaN0.620587NaN5NaT0.279080NaN0.298142NaN0.52756762017-10-01NaN0.345831NaN0.023264NaN7NaT0.522263NaN0.757472NaN0.07200082017-10-01NaN0.928859NaN0.718561NaN
首先我们可以用相同的标量值替换 NaN比如用 0。
df.fillna(0)除了直接填充值我们还可以通过参数将缺失值前面或者后面的值填充给相应的缺失值。例如使用缺失值前面的值进行填充
df.fillna(methodpad) #使用缺失值前面的数填补
df.fillna(methodbfill) #使用缺失值后面的数填补上面的例子中我们的缺失值是间隔存在的。那么如果存在连续的缺失值是怎样的情况呢试一试。首先我们将数据集的第 24 6 列的第 35 行也置为缺失值。
df.iloc[[3, 5], [1, 3, 5]] np.nan
dfTimeABCDE02017-10-010.6049150.2057690.2655890.1336210.3486931NaT0.731832NaN0.110929NaN0.43082722017-10-01NaN0.243280NaN0.927472NaN3NaTNaNNaNNaNNaNNaN42017-10-01NaN0.951334NaN0.620587NaN5NaTNaNNaNNaNNaNNaN62017-10-01NaN0.345831NaN0.023264NaN7NaT0.522263NaN0.757472NaN0.07200082017-10-01NaN0.928859NaN0.718561NaN
下面的操作是基于上面的表格来的不互相影响
可以看到连续缺失值也是按照前序数值进行填充的并且完全填充。这里我们可以通过 limit 参数设置连续填充的限制数量。
填充一项
df.fillna(methodpad, limit1) # 最多填充一项TimeABCDE02017-10-010.6049150.2057690.2655890.1336210.34869312017-10-010.7318320.2057690.1109290.1336210.43082722017-10-010.7318320.2432800.1109290.9274720.43082732017-10-01NaN0.243280NaN0.927472NaN42017-10-01NaN0.951334NaN0.620587NaN52017-10-01NaN0.951334NaN0.620587NaN62017-10-01NaN0.345831NaN0.023264NaN72017-10-010.5222630.3458310.7574720.0232640.07200082017-10-010.5222630.9288590.7574720.7185610.072000
正向填充多项
df.fillna(methodpad)TimeABCDE02017-10-010.6049150.2057690.2655890.1336210.34869312017-10-010.7318320.2057690.1109290.1336210.43082722017-10-010.7318320.2432800.1109290.9274720.43082732017-10-010.7318320.2432800.1109290.9274720.43082742017-10-010.7318320.9513340.1109290.6205870.43082752017-10-010.7318320.9513340.1109290.6205870.43082762017-10-010.7318320.3458310.1109290.0232640.43082772017-10-010.5222630.3458310.7574720.0232640.07200082017-10-010.5222630.9288590.7574720.7185610.072000
除了上面的填充方式还可以通过 Pandas 自带的求平均值方法等来填充特定列或行。举个例子
df.fillna(df.mean()[C:E])