当前位置: 首页 > news >正文

360°网站标签旋转显示特效公司的分类

360°网站标签旋转显示特效,公司的分类,爱站工具官网,商标如何自己注册锲子 在使用pandas处理数据时#xff0c;遇到了一种要按照留存天数来处理的数据#xff0c;当列所对应的日期超过了最晚的“今天”那么数据就要置为0#xff0c;举个例子#xff1a; 在这个DataFrame中#xff0c;需要将超过了今天2022-10-30的数据置为“-”#xff0c…锲子 在使用pandas处理数据时遇到了一种要按照留存天数来处理的数据当列所对应的日期超过了最晚的“今天”那么数据就要置为0举个例子 在这个DataFrame中需要将超过了今天2022-10-30的数据置为“-”需要得到下面的一个倒三角形状的数据 在这个DataFrame中day_0, day_1, …还可能是week_0, week_1, …解决这类问题会有很多种方法比较直观但是复杂度很高的方法就是for 循环遍历行再遍历列在遇到大于“今天”的数据时将其值修改为“-” 处理按天为单位的数据 待处理的数据 import reimport pandas as pddate_unit day now_date pd.Timestamp.now().floor(D) print(now_date) print(now_date - pd.to_datetime(2022-10-10))raw_df pd.DataFrame({date_str: [2022-10-27, 2022-10-28, 2022-10-29, 2022-10-30, 2022-10-31],day_0: [8, 8, 10, 6, 0],day_1: [4, 6, 0, 0, 0],day_2: [6, 7, 0, 0, 0],day_3: [4, 3, 1, 0, 0],} )print(raw_df) # 当前df # date_str day_0 day_1 day_2 day_3 # 0 2022-10-27 8 4 6 4 # 1 2022-10-28 8 6 7 3 # 2 2022-10-29 10 0 0 1 # 3 2022-10-30 6 0 0 0 # 4 2022-10-31 0 0 0 0# 目标df # date_str day_0 day_1 day_2 day_3 # 0 2022-10-27 8 4 6 4 # 1 2022-10-28 8 6 7 3 # 2 2022-10-29 10 0 0 - # 3 2022-10-30 6 0 - - # 4 2022-10-31 0 - - -今日的日期以我处理时的2022-10-31为准日期的单位是按天获取今天的日期使用pd.Timestamp.now()比datetime.datetime.now()会更方便转换成其他的格式来使用 将日期列date_str设置为index并转换为datetime对象方便比较 df.set_index(date_str, inplaceTrue) # date_str变成了index放在最左侧 # day_0 day_1 day_2 day_3 # date_str # 2022-10-27 8 4 6 4 # 2022-10-28 8 6 7 3 # 2022-10-29 10 0 0 1 # 2022-10-30 6 0 0 0 # 2022-10-31 0 0 0 0# 修改index列的类型为datetime类型之后要用于日期加减运算 df.index df.index.map(pd.to_datetime) print(df.index) # DatetimeIndex([2022-10-27, 2022-10-27, 2022-10-28, 2022-10-30, # 2022-10-31], # dtypedatetime64[ns], namedate_str, freqNone)这里用了df.index.map和接下来的df.columns.mapmap方法是对DataFrame的整个列的值做运算和各种操作的方法类似Python内置的map方法接收一个方法来同时处理多个数据 将列名称的数字提取出来转换为整数方便日期加减运算处理完之后要还原列名称所以拷贝一个副本完事之后将列名称修改回去 raw_columns df.columns.copy() df.columns df.columns.map(lambda x: int(re.sub(\D, , x))) # \d表示匹配数字大写\D表示匹配非数字将非数字替换为“” print(df.columns) # Int64Index([0, 1, 2], dtypeint64)使用pandas的整体操作行列的方法df.apply对二维的行和列一起做计算和比较这里参数axis默认为0使用的是横向操作 df df.apply(lambda col:# 这里为了方便debug断点调试可以单独写成一个方法就可以在方法里面打断点观察col.where(col.index pd.Timedelta(col.name, unitdate_unit) now_date,-) )其中col.index pd.Timedelta(col.name, unitdate_unit)col.index就是date_str index中的日期2022-10-27, 2022-10-28, …col.name是列的名称现在已经被修改成整数0, 1, 2…就是用将df中index的日期加上往后延的留存天数 其中col.where(...)的操作是对pd.DataFrame或者pd.DataFrame其中一列pd.Series对象的操作可以对不满足条件的数据赋予想要的值第一个参数是一个条件满足这个条件的数据都会被保留否则就会被赋予其他的值这个值就是第二个参数当然这个值也可以用方法做各种运算 当然也可以纵向操作不过在这次的情况效率会比横向操作要差大概率是因为多使用了row.index.map方法 df df.apply(lambda row:row.where(row.name row.index.map(lambda x: pd.Timedelta(x, unitdate_unit)) now_date,-),axis1 ) df.columns raw_columns print(df)最后把列名称还原把index转换回列 # 将留存的天数的列还原名称顺序没有发生改变直接替换即可 df.columns raw_columns # 将index还原为列 df.reset_index(inplaceTrue)print(df) # date_str day_0 day_1 day_2 day_3 # 0 2022-10-27 8 4 6 4 # 1 2022-10-28 8 6 7 3 # 2 2022-10-29 10 0 0 - # 3 2022-10-30 6 0 - - # 4 2022-10-31 0 - - -完整的代码 import reimport pandas as pddate_unit day now_date pd.Timestamp.now().floor(D) print(now_date) print(now_date - pd.to_datetime(2022-10-10))raw_df pd.DataFrame({date_str: [2022-10-27, 2022-10-28, 2022-10-29, 2022-10-30, 2022-10-31],day_0: [8, 8, 10, 6, 0],day_1: [4, 6, 0, 0, 0],day_2: [6, 7, 0, 0, 0],day_3: [4, 3, 1, 0, 0],} )print(raw_df) # 当前df # date_str day_0 day_1 day_2 day_3 # 0 2022-10-27 8 4 6 4 # 1 2022-10-28 8 6 7 3 # 2 2022-10-29 10 0 0 1 # 3 2022-10-30 6 0 0 0 # 4 2022-10-31 0 0 0 0# 目标df # date_str day_0 day_1 day_2 day_3 # 0 2022-10-27 8 4 6 4 # 1 2022-10-28 8 6 7 3 # 2 2022-10-29 10 0 0 - # 3 2022-10-30 6 0 - - # 4 2022-10-31 0 - - -df raw_df# 将日期列date_str设置为index并转换为datetime对象方便比较 df.set_index(date_str, inplaceTrue) # day_0 day_1 day_2 day_3 # date_str # 2022-10-27 8 4 6 4 # 2022-10-28 8 6 7 3 # 2022-10-29 10 0 0 1 # 2022-10-30 6 0 0 0 # 2022-10-31 0 0 0 0 df.index df.index.map(pd.to_datetime) print(df.index) # DatetimeIndex([2022-10-27, 2022-10-27, 2022-10-28, 2022-10-30, # 2022-10-31], # dtypedatetime64[ns], namedate_str, freqNone)# 将列名称的数字提取出来方便做运算处理完之后要还原列名称所以拷贝一个副本完事之后将列名称修改回去 raw_columns df.columns.copy() df.columns df.columns.map(lambda x: int(re.sub(\D, , x))) # \d表示匹配数字大写\D表示匹配非数字将非数字替换为“” print(df.columns) # Int64Index([0, 1, 2], dtypeint64) print(df) df df.apply(lambda col:col.where(col.index pd.Timedelta(col.name, unitdate_unit) now_date,-),# apply还有一个参数axis0默认横向操作也就是一列一列地操作axis1时为竖向操作 )# 将留存的天数的列还原名称顺序没有发生改变直接替换即可 df.columns raw_columns # 将index还原为列 df.reset_index(inplaceTrue)print(df) # date_str day_0 day_1 day_2 day_3 # 0 2022-10-27 8 4 6 4 # 1 2022-10-28 8 6 7 3 # 2 2022-10-29 10 0 0 - # 3 2022-10-30 6 0 - - # 4 2022-10-31 0 - - - 标记位于“今天”的位置提示数据未满 在上面的DataFrame中同时想要标记位于“今天”的数据以提示这一天的数据是不满一天的也就是得到一条which_today的这样的数据 which_todayday_4day_3day_2day_1day_0df.set_index(date_str, inplaceTrue) df.index df.index.map(pd.to_datetime)which_is_today df.index.map(lambda x:f{date_unit}_{(now_date - x).days} ) print(which_is_today) df[which_today] which_is_today print(df) # date_str # 2022-10-27 8 4 6 4 day_4 # 2022-10-28 8 6 7 3 day_3 # 2022-10-29 10 0 0 - day_2 # 2022-10-30 6 0 - - day_1 # 2022-10-31 0 - - - day_0now_date - x得到一个pd.TimeDelta的时间差对象可以用.days从这个对象中获取时间差的天数 最后总结一下这一篇介绍了在同时操作DataFrame行列时使用到的一些方法主要有Series的map方法DataFrame的apply方法DataFrame和Series共有的where方法以及pandas中的一些时间相关操作方法这些方法在特定业务逻辑的处理中都会有不错的帮助
http://www.yutouwan.com/news/12898/

相关文章:

  • wordpress网站菜单固定免费标志在线设计
  • 青年文明号网站建设vs2013 手机网站开发
  • 做导购网站有哪些互联网推广品牌
  • 公司网站建设怎么选择主机大小海南景区网站建设方案
  • 站长工具成品源码必应搜索引擎地址
  • 深圳网站建设企wordpress 自定义模型
  • 怎么发布个人网站网站生成软件
  • 淄博网站设计制作wordpress 页脚广告
  • 杭州 企业门户网站建设哈尔滨seo优化公司多少钱
  • 花店网站建设方案局域网聊天工具排行
  • 军事新闻app哪个好图片优化软件
  • 北京住房与建设部网站工程师证怎么考取需要什么条件
  • 免费中英文网站源码品牌建设
  • 怎样到国外做合法网站法网站网页设计师的能力
  • 事业网站网站建设方案需要优化的网站有哪些
  • 可以先做网站后备案吗wordpress 循环两个交替
  • 做科技汽车的视频网站深圳品牌沙发
  • 中小企业网站的建设实践报告中国建设银行手机银行app下载
  • 厘米售卡站怎么做网站棋牌类网站开发
  • 建设教育局网站硬件价格需要多少钱?网站开发全栈教程
  • 网站设计要考虑的因素淘客网站建设
  • 织梦网站优化怎么做服务号微网站怎么做
  • 快照网站平台网站如何做推广方案
  • 广元单页网站制作潍坊网站建设壹品网络
  • wordpress建站产品导入不同目录网站备案信息代码
  • 深圳专业专业网站建设店铺设计方案
  • 设计的网站源代码怎么做沧州市青县建设局网站
  • 专业 网站设计公司价格小程序游戏开发平台
  • 湖北聚四方建设有限公司网站广东省建设监理协会网站
  • 一个页面的网站保温杯软文营销300字