pandas - 对数据框 pandas python 执行多个操作

标签 pandas dataframe

我想一次对数据帧执行以下操作

opr1 = df[df != ''] 
opr2 = df.dropna(axis=1, how='all', inplace= True) 
opr3 = df.dropna(axis=0, how='all', inplace= True)

最佳答案

您可以通过掩码对集合 0 使用索引:

df[df['A'] == 0] = 0
print (df)
   A  B  C  D
0  0  0  0  0
1  6  7  2  8
2  2  8  6  3
3  0  0  0  0

替代方法是使用DataFrame.mask :

df = df.mask(df['A'] == 0, 0)

如果性能很重要,请使用 DataFrame 构造函数和 numpy.where :

df = pd.DataFrame(np.where(df['A'].to_numpy()[:, None] == 0, 0, df), 
                  index=df.index, 
                  columns=df.columns)
print (df)
   A  B  C  D
0  0  0  0  0
1  6  7  2  8
2  2  8  6  3
3  0  0  0  0

10k 行、4 列、50% 匹配数据的示例数据的性能:

#10k rows
df = pd.concat([df] * 2500, ignore_index=True)


In [101]: %timeit df[df['A'] == 0] = 0
465 µs ± 40.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [103]: %timeit df.mask(df['A'] == 0, 0)
2.56 ms ± 419 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)


In [105]: %timeit pd.DataFrame(np.where(df['A'].to_numpy()[:, None] == 0, 0, df),  index=df.index, columns=df.columns)
123 µs ± 666 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

关于pandas - 对数据框 pandas python 执行多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64134423/

相关文章:

python - 通过相应的字典值组合 Pandas 列

python - 按一列分组并在另一列中唯一

python - 将包含分组数据的 CSV 导入到 Pandas 数据框中

r - 使用单个采样命令在数据框中创建多行

python - 更好或更有效的结合 DataFrames、fillna 和细化的解决方案

python - 有效地对 pandas 中的数据帧进行分组?

python - 计算列字符串值中包含的每个单词的频率

python - Pandas 比较下一行

python - 使用 Python/Pandas 转置具有多个列组的数据框

r - 根据 R 中的其他 df 值更改列值