Я использую панда (v0.18.1) импортировать следующие данные из файла под названием «test.csv»:панда read_csv колонка DTYPE установлена десятичной, но преобразует в строку
a,b,c,d
1,1,1,1.0
Я установить dtype to 'decimal.Decimal' для столбцов 'c' и 'd', но вместо этого они возвращаются как type 'str'.
import pandas as pd
import decimal as D
df = pd.read_csv('test.csv', dtype={'a': int, 'b': float, 'c': D.Decimal, 'd': D.Decimal})
for i, v in df.iterrows():
print(type(v.a), type(v.b), type(v.c), type(v.d))
Результаты:
`<class 'int'> <class 'float'> <class 'str'> <class 'str'>`
Я также попытался преобразовать в десятичную явно после импорта без везения (преобразующие плавать работает, но не десятичную).
df.c = df.c.astype(float)
df.d = df.d.astype(D.Decimal)
for i, v in df.iterrows():
print(type(v.a), type(v.b), type(v.c), type(v.d))
Результаты:
`<class 'int'> <class 'float'> <class 'float'> <class 'str'>`
Следующий код преобразует «» к ул «decimal.Decimal», так что я не понимаю, почему панды не ведет себя таким же образом.
x = D.Decimal('1.0')
print(type(x))
Результаты:
`<class 'decimal.Decimal'>`
[pandas' документация 'является уморительно неспецифической о том, каком' dtype' есть] (HTTP: // pandas.pydata.org/pandas-docs/stable/basics.html#dtypes), но поскольку я предполагаю, что реализация в 'pandas' основана на' numpy', [у нас, к счастью, есть 'numpy' docs] (http: // docs.scipy.org/doc/numpy/reference/arrays.dtypes.html). Имейте в виду, что использование общих объектов может быть более неэффективным с точки зрения производительности и памяти, чем с использованием основных 'int' и' float'. –