Je travaille avec des lignes individuelles de trames de données pandas, mais je trébuche sur des problèmes de coercition lors de l'indexation et de l'insertion de lignes. Les pandas semblent toujours vouloir contraindre d'un type mixte int / flottant à tous les types flottants, et je ne vois aucun contrôle évident sur ce comportement.
Par exemple, voici une simple trame de données avec a
comme int
et b
comme float
:
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
Voici un problème de coercition lors de l'indexation d'une ligne:
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}
Et voici un problème de coercition lors de l'insertion d'une ligne:
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
Dans les deux cas, je souhaite que la a
colonne reste en tant que type entier, plutôt que d'être contrainte à un type flottant.
.read_[type]
prend en charge plusieurs dtypes si ...
df.loc[[0], df.columns]