~isin() python 小白笔记

如何反选 pandas 数据

最近做一个金融新闻舆情分析的一个surf(学校项目),我就帮着同学们处理处理数据,既然 pandas 那么强大,那我就选择用 pandas 解决数据问题,然后导出 excel 给同学们作更细致的分析。

  1. 首先导入数据
    datax = pd.read_excel(’/Users/trance/Python 学习/surf/surf 爬虫/正文/r2_ff3_1.xlsx’)
    照常查看两个指标:长度和头部
    len(datax)
    datax.head()
    对比了一下同学 excel 的长度,是正确的

  2. 然后排序
    datay = datax.sort_values(by=‘stkcd’)
    选择出波动性为 1 和 10 的两只股票
    dataz = (datay[datay.q_r2.isin([1,10])])
    len(dataz)
    dataz.head()

  3. 然后合并另一个 excel
    datai = pd.read_excel(’/Users/trance/Python 学习/surf/surf 爬虫/正文/r2_ff3_2.xlsx’)
    len(datai)
    datai.head()
    datai1 = datai[datai.q_r2_sd.isin([1,10])]
    这个时候需要根据共同出现的股票代码合并 datai1 和之前的 dataz,但是呢它们的内容又是不一样的,而且我们只要 dataz 的内容,而不关心 datai1 的内容,那么我们的想法就是把 dataz 中的内容和 datai1 取并集,然后用 datax 选出股票代码;当然也可以取交集,然后合并起来。
    我当时没有取交集,因为自己熟悉 isin 函数,而忘记了并集交集pandas 的实现方法。
    所以根据股票字段’stkcd’取交集为 same
    same = datai1[datai1.stkcd.isin(dataz.stkcd)]
    比起交集来,我们更关心不一样的地方,那么就可以用 ~ 符号取反
    我尝试了用 1-,或者取 not 都没有用,但是~符号却可以用
    difference = datai1[~datai1.stkcd.isin(dataz.stkcd)]

  4. 最后合并数据
    m = datax[datax.stkcd.isin(difference.stkcd)]
    new = pd.concat([dataz,m])

  5. 把数据切开成 18 份便于他们每个人完成分析
    len(new)
    B = [None] * 18
    for i in np.arange(18):
    B[i] = new.iloc[276i:276i+276]
    B[i].to_excel(‘read{}.xlsx’.format(i))

附言

上面有一些可以优化的地方,比如说一开始不需要排序,最后 new 应该排一下序,而且上面的过程可以用其它 pandas 自带的函数直接实现,不过我就当练练手,这次就用这种麻烦繁琐但也能成功的‘克鲁机’办法啦。

你可能感兴趣的:(pandas,python,pandas)