如果索引的dtype与int / str

时间:2020-02-03 16:12:06

标签: python pandas dataframe loc

我有一个包含混合索引值int和str的数据集,df.to_csv将其作为对象读取。

如果我尝试对行进行切片,这将不起作用,则会出现TypeError。

我知道我可以通过更改索引dtype来解决它,但是我想了解为什么会发生这种情况,或者是否有切片这些混合dtype索引的其他方法?

我创建了以下测试用例:

import os
import pandas as pd
import numpy as np
#all str index
df1 = pd.DataFrame({'Col': [0, 20, 30, 10]}, index=['a', 'b','c','d'])
#all int index
df2 = pd.DataFrame({'Col': [0, 20, 30, 10]}, index=[1, 2, 3, 4])
#all str index with numbers
df3 = pd.DataFrame({'Col': [0, 20, 30, 10]}, index=['a', 'b', '3', '4'])
#mixed str/int
df4 = pd.DataFrame({'Col': [0, 20, 30, 10]}, index=['a', 'b', 3, 4 ])

df1.loc['b':'d']
    Col
b   20
c   30
d   10

df2.loc[2:4]
Col
2   20
3   30
4   10

df3.loc['b':'4']
Col
b   20
3   30
4   10

df4.loc['b':4]

TypeError

df4.index = df4.index.map(str)
df4.loc['b':'4']
Col
b   20
3   30
4   10

为什么切片不适用于df4? 您可以在片中“修复”吗? 更改索引的dtype是唯一的选择吗?

1 个答案:

答案 0 :(得分:1)

更改索引的dtype是唯一的选择吗?

否,您可以使用get_loc来实现,它可以找到标签索引的位置,您可以在iloc[]下使用它:

df4.iloc[df4.index.get_loc('b') : df4.index.get_loc(4)+1]

   Col
b   20
3   30
4   10