gpt4 book ai didi

python - 在索引和插入行时防止强制 Pandas 数据帧

转载 作者:行者123 更新时间:2023-12-03 14:59:49 28 4
gpt4 key购买 nike

我正在处理单独的 Pandas 数据框行,但是在索引和插入行时遇到了强制问题。 Pandas 似乎总是想从混合的 int/float 强制转换为全浮点类型,我看不到对这种行为的任何明显控制。

例如,这里是一个简单的数据框 aintbfloat :

import pandas as pd
pd.__version__ # '0.25.2'

df = pd.DataFrame({'a': [1], 'b': [2.2]})
print(df)
# a b
# 0 1 2.2
print(df.dtypes)
# a int64
# b float64
# dtype: object

这是索引一行时的强制问题:
print(df.loc[0])
# a 1.0
# b 2.2
# Name: 0, dtype: float64
print(dict(df.loc[0]))
# {'a': 1.0, 'b': 2.2}

这是插入一行时的强制问题:
df.loc[1] = {'a': 5, 'b': 4.4}
print(df)
# a b
# 0 1.0 2.2
# 1 5.0 4.4
print(df.dtypes)
# a float64
# b float64
# dtype: object

在这两种情况下,我都想要 a列保持为整数类型,而不是强制为浮点类型。

最佳答案

每当您从数据帧获取数据或将数据附加到数据帧并需要保持数据类型相同时,请避免转换为不知道所需数据类型的其他内部结构。

当你这样做 df.loc[0]它转换为 pd.Series ,

>>> type(df.loc[0])
<class 'pandas.core.series.Series'>

现在, Series将只有一个 dtype .从而胁迫 intfloat .

而是保持结构为 pd.DataFrame ,
>>> type(df.loc[[0]])
<class 'pandas.core.frame.DataFrame'>

选择需要的行作为框架,然后转换为 dict
>>> df.loc[[0]].to_dict(orient='records')
[{'a': 1, 'b': 2.2}]

同样,要添加新行,请使用 pandas pd.DataFrame.append 功能,
>>> df = df.append([{'a': 5, 'b': 4.4}]) # NOTE: To append as a row, use []
a b
0 1 2.2
0 5 4.4

以上不会引起类型转换,
>>> df.dtypes
a int64
b float64
dtype: object

关于python - 在索引和插入行时防止强制 Pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58531998/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com