Python 提取行时保留条目的类型(int或float)

Python 提取行时保留条目的类型(int或float),python,pandas,Python,Pandas,我有一个数据框,我将几行附加到包含不同类型(浮点或整数)元素的数据框中: 现在,我想提取包含最小值的行,例如,I: df.iloc[df['i'].argmin()] 这给了我 i 0.0 j 0.3 Name: 0, dtype: float64 其中,i现在已转换为浮点数。这对我来说是非常不可取的,我希望它保持一个整数 是否有方法执行iloc,使类型保持不变?还是一种最初定义df的方法,以便它尊重每列的类型 请注意,我更喜欢一种解决方案,它不假设我事先知道哪些列是整数,哪些列

我有一个数据框,我将几行附加到包含不同类型(浮点或整数)元素的数据框中:

现在,我想提取包含最小值的行,例如,
I

df.iloc[df['i'].argmin()]
这给了我

i    0.0
j    0.3
Name: 0, dtype: float64
其中,
i
现在已转换为浮点数。这对我来说是非常不可取的,我希望它保持一个整数

是否有方法执行
iloc
,使类型保持不变?还是一种最初定义
df
的方法,以便它尊重每列的类型

请注意,我更喜欢一种解决方案,它不假设我事先知道哪些列是整数,哪些列是浮点。我只知道这两种类型的列都会存在


编辑:假设我现在要将结果转换为字典:

df = pd.DataFrame()

df = df.append( pd.DataFrame({'i': [0],
                              'j': [0.3]}), ignore_index=True)

df = df.append( pd.DataFrame({'i': [0],
                              'j': [0.3]}), ignore_index=True)            

df = df.iloc[df['i'].idxmin()].astype(object)            
df.astype(object).to_dict()

这给了我
{'i':0.0,'j':0.3}
。字典的形式与期望的一样,但是,整数现在变成了浮点。是否可以保留
int
-格式?

argmin
已被弃用,请将
idxmin
loc
一起使用

现在的情况是,您使用标量进行切片,并得到一个序列作为回报。该系列将有一个数据类型。相反,使用列表或数组进行切片

# notice the extra set of brackets
df.loc[[df['i'].idxmin()]]

   i    j
0  0  0.3
这会告诉Pandas您想要回一个数据帧


如果需要
argmin

df.iloc[[df['i'].values.argmin()]]

创建dict的最简单方法

dict(next(df.iloc[[df['i'].values.argmin()]].itertuples(index=False))._asdict())


尝试修复输出

df.iloc[df['i'].idxmin()].astype(object)
Out[1480]: 
i      0
j    0.3
Name: 0, dtype: object

当我使用
来记录
时,
int
列的数据类型变为float-为什么?有几个地方可以使用
来记录
。向我展示您运行的整个表达式。请记住,当您使用标量调用
iloc
时,就像您最初使用标量调用一样,也像您使用温的答案
df.iloc[df['i'].idxmin()].astype(object)
一样,它是一个系列对象,只能有一个数据类型。当您使用
对象
作为该数据类型时,可以掩盖其他问题。Pandas将格式化等于整数的浮点,就像它是整数一样。你真的需要像我所展示的那样调用它来保留数据类型。谢谢。这给了我一本字典,它的形式是
{'i':{0:0},'j':{0:0.3}
。是否可以删除每个值中的首字母
0:
,这样我就得到了一个形式为
{'I':0.0,'j':0.3}
的字典,谢谢。我尝试过这个方法,但效果很好-当我将结果转换为字典时,它仍然会将int转换为float(参见我的OP)@N08,那么你可以按照pir的建议:-)
{k: v[0] for k, v in df.iloc[[df['i'].values.argmin()]].items()}
df.iloc[df['i'].idxmin()].astype(object)
Out[1480]: 
i      0
j    0.3
Name: 0, dtype: object