【问题标题】:changing data type in pandas dataframe changes filtering result更改熊猫数据框中的数据类型更改过滤结果
【发布时间】:2020-05-26 02:46:09
【问题描述】:

我在过滤数据帧时观察到以下我不理解的行为

import pandas as pd
mydict={'dep':[0,0,0,0],'nr':[1,1,2,2],'ft':[1,2,3,4],'car':['corsa','astra','clio','megane']}
carsdf = pd.DataFrame(mydict)
condition1 = carsdf['nr'] == 1
condition2 = carsdf['ft'] == 1
carsdf.loc[condition1 & condition2,['dep']]['dep'].tolist()

结果 [0]

现在我再次做同样的事情,但在将类型更改为 str 之后

carsdf = carsdf.astype('str')
condition1 = carsdf['nr'] == 1
condition2 = carsdf['ft'] == 1
carsdf.loc[condition1 & condition2,['dep']]['dep'].tolist()

结果[]

我希望 ['0']

里面没有元素。为什么将类型更改为str时,0会消失?

如何确保没有数据丢失?

注意:如果您想知道为什么我想要“0”,因为收到的数据也可能采用“2,3,4”的形式,我希望将其转换为值列表。如果为 0,我需要 ['0']

这里是截图

谢谢

【问题讨论】:

  • condition1 = carsdf['nr'] == str(1) condition2 = carsdf['ft'] == str(1) 你能试试这个吗?

标签: python pandas dataframe filtering


【解决方案1】:

因为您正在寻找对整数 (== 1) 的比较。如果我们尝试== '1',我们会得到预期的结果。

旁注,你可以用“熊猫”的方式重写你的最后一行,见下文

carsdf = carsdf.astype('str')
condition1 = carsdf['nr'] == '1'
condition2 = carsdf['ft'] == '1'
carsdf.loc[condition1 & condition2,'dep'].tolist()

输出

['0']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-31
    • 2022-10-08
    • 2019-06-21
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2020-08-06
    • 2017-08-04
    相关资源
    最近更新 更多