pandas if语句有问题?不相等规则不起作用?

gxwragnw  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(120)

我有1000个结构相同的 Dataframe ,但其中一些可能包含字符串作为值。对于所有这些帧,我需要做同样的计算,只是排除那些 Dataframe 中出现子环的行。包含字符串的数据集结构示例如下:

time    x           y               z
0.00  run_failed  run_failed   run_failed
0.02  run_failed  run_failed   run_failed
0.03  test_failed test_failed  test_failed
0.04  44            321         644
0.04  44            321         644
0.04  44            321         644
0.03  test_failed test_failed  test_failed
0.04  44            321         644
0.04  44            321         644

dtypes方法,那些包含子字符串的dfs将始终是对象类型,而float 64的“普通”dfs -
为了解决这个问题,我编写了以下脚本:

for df in dfs:  
   add = 0
   z = pd.read_csv(df)
   if type(z["x"]) != np.float64:
        bmb = z[z['x'].str.contains('failed')]
        z = z.drop(bmb.index)
        add = len(bmb)
        print(add)
   ....
   and then the code for doing calculations assuming that if string occured, it was dropped inside if statement

但是当我运行代码时,它返回错误:“只能使用.str访问器与字符串值!”指向if语句块内部,但是数据集如果完全是float 64类型,以及为什么它试图处理这个“bmb = z[z ['x'].str.contains('failed')]”命令对我来说一点也不清楚。

li9yvcax

li9yvcax1#

if type(z["x"]) != np.float64:

在这里,您将获得DataFrame* 的 *column类型,即Series,请考虑以下简单示例

import pandas as pd
df = pd.DataFrame({"x":[1,2,3]},dtype="int32")
print(type(df["x"]))

给出输出

<class 'pandas.core.series.Series'>

因此,您的条件始终保持不变(即与写入if True:相同)。如果您对保持值的类型感兴趣,请使用.dtype属性

print(df["x"].dtype)

给出输出

int32
odopli94

odopli942#

我想我找到问题所在了首先我换了衣服

if type(z["x"]) != np.float64

z['x'].dtype == 'object'

在进一步的计算中,当我将pandas列作为series时,我添加了.astype(float),看起来就像是通过if语句处理dataframe,列中的值变成了字符串,因为它们被返回如下:

array(['0.00260045', '0.00257398', '0.00247482', ..., '0.02017634', '0.01997158','0.02019846'])

相关问题