pandas向左移动非空单元格

  • 碰到个小问题, 因为需要更改excel 的行为。 

    处理最多的还是excel的事, 不过看起来是excel。实际上对pandas 的库的熟悉。读取,更改,应用等等,方法。

    十分有用。

 

先说需求,本来的表格形式为:

 

 

需要变成:

 

 

网上找了篇链接,移动非空单元格的。

https://stackoom.com/question/2AWpZ/%E5%9C%A8pandas-DataFrame%E4%B8%AD%E5%B0%86%E9%9D%9E%E7%A9%BA%E5%8D%95%E5%85%83%E6%A0%BC%E7%A7%BB%E5%88%B0%E5%B7%A6%E4%BE%A7

 

思路:

   1 把所有零都变成null 值

  2 套用文章中的函数 

最后完美达成。

 

写习惯了。其实,这个很简单,不用分这么细。 不过编程思维,将模块分解,成一个小单元去组合。

尽量细分到了每个模块做什么事,合起来。

一个函数内部精密度高,可塑性强。但是可以到处复用。

算法明显就是如此。 

低耦合,高内聚。

# _*_coding:utf-8 _*_
import pandas as pd
import numpy as np


class baixi:

    # 初始化
    def __init__(self):
        self.pd = pd
        self.deal_data = pd.read_excel(r'C:\Users\daojia\Desktop\学习\work\Sample.xlsx', sheet_name='CQL')

    # 转置过程,将null 值全部删除,重建。很值得学习
    @staticmethod
    def squeeze_nan(x):
        original_columns = x.index.tolist()

        squeezed = x.dropna()
        squeezed.index = [original_columns[n] for n in range(squeezed.count())]

        return squeezed.reindex(original_columns, fill_value=np.nan)

    # 重新获取数据
    def get_lc_data(self):
        # 获取数据
        data = self.deal_data
        data[data.__eq__(0)] = np.nan
        # 调用函数左移数据
        out_data = data.apply(self.squeeze_nan, axis=1)
        # 保存数据
        print(data)
        out_data.to_excel(r'C:\Users\daojia\Desktop\学习\Sample123.xlsx')

        # return out_data


if __name__ == '__main__':
    baixi().get_lc_data()
    a = 1

 

 

posted @ 2019-12-04 10:13  Sakura_柏  阅读(927)  评论(0编辑  收藏  举报