Python 熊猫对象索引可以是string或int,如何区分它们?

Python 熊猫对象索引可以是string或int,如何区分它们?,python,pandas,types,Python,Pandas,Types,我有两个熊猫数据帧,每个数据帧都有一个带有dtypeobject的索引,在这两个数据帧中我都可以看到值533。但是,当我加入它们时,结果是空的,因为其中一个是数字533,另一个是字符串“533” 我已经找到了一个非常麻烦的方法来提前知道,这是不匹配的。我尝试df.loc[“533”]和df.loc[533]并等待看哪一个会失败 一定有更好的方法,对吧?区分它们的最好方法是使用索引对象所配备的“is_类型”方法。这使您可以推断索引所包含的值的类型,从而推断加入/重新索引是否会得到预期的结果 # S

我有两个熊猫数据帧,每个数据帧都有一个带有dtype
object
的索引,在这两个数据帧中我都可以看到值
533
。但是,当我加入它们时,结果是空的,因为其中一个是数字
533
,另一个是字符串
“533”

我已经找到了一个非常麻烦的方法来提前知道,这是不匹配的。我尝试
df.loc[“533”]
df.loc[533]
并等待看哪一个会失败


一定有更好的方法,对吧?

区分它们的最好方法是使用索引对象所配备的“is_类型”方法。这使您可以推断索引所包含的值的类型,从而推断加入/重新索引是否会得到预期的结果

# String index
df1 = pd.DataFrame({'A': [1, 2, 3]}, index = ["1", "2", "3"])

# Int index
df2 = pd.DataFrame({'A': [1, 2, 3]}, index = [1, 2, 3])

# Convert string index to integers:
df1.index = df1.index.astype(int)

# Convert integer index to strings:
df2.index = df2.index.astype(str)
另一种方法可能是直接检查索引的
dtype
,但在比较(例如)int类型索引和仅包含整数的对象类型索引时,这会给出假阴性结果

下面是一个示例,其中有四个索引对象来突出显示“is_type”方法:

您的问题主要涉及检查索引是否包含字符串或整数。在这种情况下,您可以使用
is\u integer()

由于
idx2
至少包含一个字符串,因此检查返回
False
。因此,您知道连接/重新索引像
idx1
这样的整数索引是行不通的

但是,对于仅包含整数的对象数据类型索引,相同的检查将返回
True
(因此将成功地与
idx1
合并/重新编制索引):

另一个有用的检查是
is_mixed()
,它允许您检查索引(带有对象数据类型)是否包含不同类型的混合:

>>> idx3.is_mixed()
True

所有
索引
对象的可用类型推断方法如下,以供参考:

is_all_dates
is_boolean
is_categorical
is_floating
is_integer
is_mixed
is_numeric
is_object

您是否尝试过先遍历数据帧并显式转换它们?(我假设它们都是数字)你可以使用int或str强制它们都是一个或另一个。你想让它们匹配(通过强制转换为普通类型),还是只想检查它们的类型以确定它们不匹配?@ajcr-我更希望在我强制转换之前知道它们不匹配
>>> idx4.is_integer()
True
>>> idx3.is_mixed()
True
is_all_dates
is_boolean
is_categorical
is_floating
is_integer
is_mixed
is_numeric
is_object