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