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