• 售前

  • 售后

热门帖子
入门百科

利用pandas忽略行列索引,纵向拼接多个dataframe

[复制链接]
真不是我干的的 显示全部楼层 发表于 2021-10-26 13:36:20 |阅读模式 打印 上一主题 下一主题
从wind上面搞到一批股票数据后发现:本来是一个范例的数据,但是由于季度差别,列名也差别,导致使用pandas合并多个报表的时间总是出现一大堆NaN,以是这里我写了一个函数,专门针对如许的表
它的思路是:

天生一堆单词,然后把这些表的列索引全部更换为这些单词,然后调用 pd.concat() 把这些dataframe全部合并后再把列索引改返来,固然,这里也可以手动指定列索引。
使用方法见代码的最后一行,传入一个dataframe的list就可以了。
  1. import pandas as pd
  2. from random import Random
  3. # 随机生成一堆单词作为公共的列名
  4. def random_list(random_str_count, randomlengtd=6):
  5. result_list = []
  6. random = Random()
  7. chars = "qwertyuiopasdfghjklzxcvbnm"
  8. for str_count in range(random_str_count):
  9. ranstr = ""
  10. lengtd = len(chars) - 1
  11. for str_lengtd in range(randomlengtd):
  12. ranstr += chars[random.randint(0, lengtd)]
  13. result_list.append(ranstr)
  14. return result_list
  15. def combine_as_data_location(pd_list, columns=''):
  16. if not pd_list:
  17. return None
  18. old_columns = pd_list[0].columns
  19. if columns:
  20. new_columns = columns
  21. else:
  22. new_columns = random_list(pd_list[0].shape[1])
  23. for data_df in pd_list:
  24. # data is pandas Dataframe
  25. data_df.columns = new_columns
  26. result_df = pd.concat(pd_list, ignore_index=True)
  27. if columns:
  28. return result_df
  29. else:
  30. result_df.columns = old_columns
  31. return result_df
  32. result_df = combine_as_data_location([df1,df2,df3])
复制代码
增补:pandas.concat实现竖着拼接、横着拼接DataFrame
1、concat竖着拼接(默认的竖着,axis=0)

话不多说,直接看例子:
  1. import pandas as pd
  2. df1=pd.DataFrame([10,12,13])
  3. df2=pd.DataFrame([22,33,44,55])
  4. df3=pd.DataFrame([90,94])
复制代码
  1. df1
复制代码
            0                  0      10              1      12              2      13   
  1. df2
复制代码
            0                  0      22              1      33              2      44              3      55   
  1. df3
复制代码
            0                  0      90              1      94   
  1. res= pd.concat([df1,df2,df3])
  2. res
复制代码
            0                  0      10              1      12              2      13              0      22              1      33              2      44              3      55              0      90              1      94    如果要天生新索引,忽略原来索引怎么办?
默认有个参数ignore_index= False,将其值改为True:
  1. res2= pd.concat([df1,df2,df3], ignore_index=True)
  2. res2
复制代码
            0                  0      10              1      12              2      13              3      22              4      33              5      44              6      55              7      90              8      94    2、concat横着拼接

用参数axis= 1,看例子:
  1. res_heng= pd.concat([df1,df2,df3], axis=1)
  2. res_heng
复制代码
            0      0      0                  0      10.0      22      90.0              1      12.0      33      94.0              2      13.0      44      NaN              3      NaN      55      NaN    以上为个人经验,盼望能给各人一个参考,也盼望各人多多支持草根技术分享。如有错误或未考虑完全的地方,望不吝赐教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作