转换为DF Pandas中的String和使用Series的`in`操作符的行为

时间:2014-09-01 12:07:21

标签: python pandas dataframe types

我有一些熊猫DF。通常数据是Object类型。

现在我想做下一次转换:

df.A = df.A.astype(int)
df.B = df.B.astype(float)
df.C = df.C.astype(str)

这不适用于字符串转换...输出为:

df.dtypes
df.A int64
df.B float64
df.C object

转换中的错误是什么以及如何转换为String?可能是其他的 - 我想要一些通用代码,可能未来的String列没有一些值(只是空对象),可能这是一个问题吗?

我真正想要的是什么:

我的df.C看起来像这样:

0 "test1"
1 "test2"
2 "test3"
....

现在,我确定我有对象“test1”(我只能打开列,我看到这个值) 我用完之后

"test1" in df.C

我得到False怎么可能?一些想法,可能我必须将我的列转换为数组或列表并在数组或列表中搜索?

1 个答案:

答案 0 :(得分:2)

关于in的问题:

据我所知,pandas.Series没有自己的__contains__方法(用于实现in),而是从NDFrame继承方法

此处,__contains__实现为:

def __contains__(self, key):
    """True if the key is in the info axis """
    return key in self._info_axis

也就是说,它查看系列的索引,而不是条目。因此,例如0 in df.CTrue,因为0位于索引中。相反,"test1"不在您的DataFrame的索引中,因此Pandas会返回False

根据评论中的建议,您可以使用df.C.isin(["test1"]).any()查看字符串是否显示在列中。