Я пробую это:

pd.DataFrame(numpy.array([[1, 2, 3], [4, 5, 6], [7, 'a', 'b']]), columns=['a', 'b', 'c']).dtypes

a    object
b    object
c    object
dtype: object

Но в следующем случае, когда все столбцы содержат только целые значения, я получил правильные типы столбцов

pd.DataFrame(numpy.array([[1, 2, 3], [4, 5, 6]]), columns=['a', 'b', 'c']).dtypes
a    int64
b    int64
c    int64
dtype: object

Почему pandas не приводит к столбцам int64 a, b в первом случае?

1
Сергей Бурлака 17 Янв 2021 в 02:36

2 ответа

Лучший ответ

Numpy ndarray может иметь только один тип данных, и он использует самый общий, который может хранить все различные типы значений. Итак, ndarray numpy.array([[1, 2, 3], [4, 5, 6], [7, 'a', 'b']] относится к типу Object, поскольку он должен хранить как целые числа, так и строки. При преобразовании в фрейм данных Pandas использует этот тип для всех столбцов.

Если вы хотите иметь разные типы данных для разных столбцов, вы можете создать фрейм данных из нескольких отдельных ndarrays, например

numpy.array([1, 2, 3]),
numpy.array([4, 5, 6]),
numpy.array([7, 'a', 'b']) 

Или преобразовать столбцы после создания с помощью чего-то вроде to_numeric .

0
Ivan Gorin 16 Янв 2021 в 23:53

Массив Numpy не может содержать разные типы.

Вы можете легко преобразовать String в числовой, если столбец содержит только числовые данные с помощью этого метода:

df.a = pd.to_numeric(df.a)   # a is the column name
0
mohamed elbilbesy 17 Янв 2021 в 00:17