Я работаю с отдельными строками фреймов данных Pandas, но я спотыкаюсь о проблемах принуждения при индексации и вставке строк. Панды, кажется, всегда хотят привести к смешанному типу int / float к типам с плавающей точкой, и я не вижу каких-либо очевидных элементов управления этим поведением.
Например, вот простой фрейм данных с a
as int
и b
as 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
Вот проблема приведения при индексации одной строки:
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
столбец оставался целочисленным типом, а не приводился к типу с плавающей точкой.
.read_[type]
хотя поддерживает несколько dtypes ...
df.loc[[0], df.columns]