文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【Python实用基础整合(二)】DataFrame是否为空判断及行/列差值、变化率计算

2023-09-06 14:43

关注

一、DataFrame是否为空

判断整个DataFrame是否为空的方法:

pandas.DataFrame.empty

示例:

df = pd.DataFrame({'fruits':['apple', 'orange', 'watermelon'], 'price':[6, 4, 2]})df       fruits  price0       apple      61      orange      42  watermelon      2if df.empty:    print('=== df为空 ===')else:    print('=== df非空 ===')  # === df非空 ===df_empty = pd.DataFrame(columns=['fruits', 'price'])df_emptyEmpty DataFrameColumns: [fruits, price]Index: []if df_empty.empty:    print('=== df_empty为空 ===')  # === df_empty为空 ===else:    print('=== df_empty非空 ===') 

而判断具体某个元素是否为NAN,则可以使用isna()函数:

df = pd.DataFrame({'fruits':['apple', 'orange', 'watermelon'], 'price':[6, 4, 2]})df       fruits  price0       apple      61      orange      42  watermelon      2df.isna()   fruits  price0   False  False1   False  False2   False  False

或者使用空值的特征判断(NAN的一大特征就是不等于本身):

np.nan != np.nanTrue

二、DataFrame行/列差值计算

计算DataFrame行/列的差值使用:

DataFrame.diff(periods=1, axis=0)

其中,

示例:

2.1 periods示例

df = pd.DataFrame({'price':[6, 4, 2, 4, 6], 'weight': [12, 43, 23, 3, 5], 'total':[72, 172, 46, 12, 30]})df   price  weight  total0      6      12     721      4      43    1722      2      23     463      4       3     124      6       5     30# 默认对行操作,periods=1表示后一行减前一行df.diff(periods=1)   price  weight  total0    NaN     NaN    NaN1   -2.0    31.0  100.02   -2.0   -20.0 -126.03    2.0   -20.0  -34.04    2.0     2.0   18.0# periods=2表示做差的两行间相隔一行df.diff(periods=2)   price  weight  total0    NaN     NaN    NaN1    NaN     NaN    NaN2   -4.0    11.0  -26.03    0.0   -40.0 -160.04    4.0   -18.0  -16.0# 默认对行操作,periods=-1表示前一行减后一行df.diff(periods=-1)   price  weight  total0    2.0   -31.0 -100.01    2.0    20.0  126.02   -2.0    20.0   34.03   -2.0    -2.0  -18.04    NaN     NaN    NaN

2.2 axis示例

df   price  weight  total0      6      12     721      4      43    1722      2      23     463      4       3     124      6       5     30# axis=0表示对行操作df.diff(periods=1, axis=0)   price  weight  total0    NaN     NaN    NaN1   -2.0    31.0  100.02   -2.0   -20.0 -126.03    2.0   -20.0  -34.04    2.0     2.0   18.0# axis=1表示对列操作df.diff(periods=1, axis=1)   price  weight  total0    NaN       6     601    NaN      39    1292    NaN      21     233    NaN      -1      94    NaN      -1     25

三、DataFrame行/列变化率计算

计算DataFrame中行/列的变化率时使用函数:

pd.DataFrame.pct_change(periods, fill_method, limit, freq, **kwargs)

参数含义:

函数返回值类型与调用对象一致,为Series或者DataFrame。

Examples:

-----------**Series**-----------        >>> s = pd.Series([90, 91, 85])        >>> s        0    90        1    91        2    85        dtype: int64        >>> s.pct_change()        0         NaN        1    0.011111        2   -0.065934        dtype: float64        >>> s.pct_change(periods=2)        0         NaN        1         NaN        2   -0.055556        dtype: float64        # 存在空值时,使用前一个有效值先填充后再计算        >>> s = pd.Series([90, 91, None, 85])        >>> s        0    90.0        1    91.0        2     NaN        3    85.0        dtype: float64        >>> s.pct_change(fill_method='ffill')        0         NaN        1    0.011111        2    0.000000        3   -0.065934        dtype: float64---------------**DataFrame**---------------        >>> df = pd.DataFrame({        ...     'FR': [4.0405, 4.0963, 4.3149],        ...     'GR': [1.7246, 1.7482, 1.8519],        ...     'IT': [804.74, 810.01, 860.13]},        ...     index=['1980-01-01', '1980-02-01', '1980-03-01'])        >>> df                        FR      GR      IT        1980-01-01  4.0405  1.7246  804.74        1980-02-01  4.0963  1.7482  810.01        1980-03-01  4.3149  1.8519  860.13        >>> df.pct_change()                          FR        GR        IT        1980-01-01       NaN       NaN       NaN        1980-02-01  0.013810  0.013684  0.006549        1980-03-01  0.053365  0.059318  0.061876                # 对列进行变化百分比计算,同时periods=-1表示前一列相对后一列的变化率        >>> df = pd.DataFrame({        ...     '2016': [1769950, 30586265],        ...     '2015': [1500923, 40912316],        ...     '2014': [1371819, 41403351]},        ...     index=['GOOG', 'APPL'])        >>> df                  2016      2015      2014        GOOG   1769950   1500923   1371819        APPL  30586265  40912316  41403351                >>> df.pct_change(axis='columns', periods=-1)                  2016      2015  2014        GOOG  0.179241  0.094112   NaN        APPL -0.252395 -0.011860   NaN

【述毕】

笔者独自运营了微信公众号,用于分享个人学习及工作生活趣事,大家可以关注一波。(微信搜索“微思研”)

来源地址:https://blog.csdn.net/weixin_44237659/article/details/131055002

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯