【发布时间】:2016-06-12 07:09:41
【问题描述】:
我需要对我的 12 列数据框中的两列进行 Winsorize。
假设,我有列“A”、“B”、“C”和“D”,每列都有一系列值。鉴于我清理了一些 NaN 列,列数从 100 减少到 80,但它们仍被索引为 100,有间隙(例如,缺少第 5 行)。
我想通过 winsorize 方法仅转换列“A”和“B”。为此,我必须将列转换为 np.array。
import scipy.stats
df['A','B','C','D'] = #some values per each column
ab_df = df['A','B']
X = scipy.stats.mstats.winsorize(ab_df.values, limits=0.01)
new_ab_df = pd.DataFrame(X, columns = ['A','B'])
df = pd.concat([df['C','D'], new_ab_df], axis=1, join='inner', join_axes=[df.index])
当我转换为 np.array,然后再转换回 pd.DataFrame 时,它的 len() 在 80 处是正确的,但我的索引已重置为 0->80。如何确保我的转换“A”和“B”列被正确索引?我不认为我可以使用 apply(),它会保留索引顺序并简单地换出值而不是我的方法,它创建我的 df 的转换副本,只有 2 列,然后将它们连接到我的其余部分未转换的列。
【问题讨论】:
-
列数从100减少到80,还是行数?
标签: python pandas scipy data-cleaning