微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

if用于Python中熊猫数据帧的语句

我有一个如下所示的数据框:

timestamp                      0            1            2            3                                           
2013-04-17 05:00:00     4.335212  2655.140854  2655.140854  2655.140854   
2013-04-17 05:10:00     2.224966  2655.140854  2655.140854  2655.140854   
2013-04-17 05:20:00     2.409150  2655.140854  2655.140854  2655.140854   
2013-04-17 05:30:00  2655.140854  2655.140854  2655.140854  2655.140854 

我需要对数据框中的每个值强加一个if语句标准,我尝试过使用:

dirt = dirt.astype(float)
for ind, i in enumerate(dirt):
    if i < 0:
        dirt[ind] = i + 360
    if i > 360:
        dirt[ind] = i - 360

但是,任何值都不会发生加法和减法.有任何想法吗?

解决方法:

您应该使用.iterrows()而不是枚举(df).枚举(df)时,只需获取不符合条件的列名. iterrows()每次迭代都返回索引和行(作为pandas.Series).

但是根据您的要求,您可以迭代df.columns并以矢量化方式为每列执行所需操作.示例 –

for col in df.columns:
    df.loc[df[col] < 0,col] += 360
    df.loc[df[col] > 360,col] -= 360

我使用列而不是行,假设列的数量远小于行数,因此我们将以更少的迭代次数进行实际循环(并且同时使用向量化的加法来获取更多数据).

演示 –

In [128]: df
Out[128]:
                               0            1            2            3
timestamp
2013-04-17 05:00:00     4.335212  2655.140854  2655.140854  2655.140854
2013-04-17 05:10:00     2.224966  2655.140854  2655.140854  2655.140854
2013-04-17 05:20:00     2.409150  2655.140854  2655.140854  2655.140854
2013-04-17 05:30:00  2655.140854  2655.140854  2655.140854  2655.140854

In [134]: for col in df.columns:
   .....:     df.loc[df[col] < 0,col] += 360
   .....:     df.loc[df[col] > 360,col] -= 360
   .....:

In [135]: df
Out[135]:
                               0            1            2            3
timestamp
2013-04-17 05:00:00     4.335212  2295.140854  2295.140854  2295.140854
2013-04-17 05:10:00     2.224966  2295.140854  2295.140854  2295.140854
2013-04-17 05:20:00     2.409150  2295.140854  2295.140854  2295.140854
2013-04-17 05:30:00  2295.140854  2295.140854  2295.140854  2295.140854

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐