TypeError: тип данных не понимается при разборе CSV с помощью Pandas - PullRequest
3 голосов
/ 02 ноября 2019

При анализе файла CSV с помощью Pandas столбцам, содержащим datetime, присваивается тип object по умолчанию.

Как убедиться, что в первом столбце указан правильный тип, назначенный в этом примере?

import pandas as pd
import datetime as datetime

data = pd.read_csv("scans.csv")

# dtypes = {
#     'date': datetime,
#     'muscle': str,
#     'side': str,
#     'MQ(0-100)': float,
#     'MQ(raw)': int,
#     'fat': float
# }
# data = pd.read_csv("scans.csv", dtype=dtypes)

print(data.head())
print(data.dtypes)

Вот вывод консоли

               date      muscle side  MQ(0-100)  MQ(raw)   fat
0  12/16/2018 16:08      glutes    R       99.7      154   8.6
1  12/16/2018 16:08       total    R       81.8      129  17.0
2  12/16/2018 16:04      glutes    L       98.1      140  10.8
3  12/16/2018 16:03  upper_back    R       70.2      132  11.6
4  12/16/2018 16:02  upper_back    L       77.8      136  11.4
date          object
muscle        object
side          object
MQ(0-100)    float64
MQ(raw)        int64
fat          float64
dtype: object

Ошибка при запуске полного кода

/Users/Developer/PycharmProjects/Sculpt/venv/bin/python /Users/Developer/PycharmProjects/Sculpt/script.py
Traceback (most recent call last):
  File "/Users/Developer/PycharmProjects/Sculpt/venv/lib/python3.8/site-packages/pandas/core/dtypes/common.py", line 2050, in pandas_dtype
    npdtype = np.dtype(dtype)
TypeError: data type not understood

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/Developer/PycharmProjects/Sculpt/script.py", line 18, in <module>
    data = pd.read_csv("scans.csv", dtype=dtypes)
  File "/Users/Developer/PycharmProjects/Sculpt/venv/lib/python3.8/site-packages/pandas/io/parsers.py", line 685, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/Users/Developer/PycharmProjects/Sculpt/venv/lib/python3.8/site-packages/pandas/io/parsers.py", line 457, in _read
    parser = TextFileReader(fp_or_buf, **kwds)
  File "/Users/Developer/PycharmProjects/Sculpt/venv/lib/python3.8/site-packages/pandas/io/parsers.py", line 895, in __init__
    self._make_engine(self.engine)
  File "/Users/Developer/PycharmProjects/Sculpt/venv/lib/python3.8/site-packages/pandas/io/parsers.py", line 1135, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "/Users/Developer/PycharmProjects/Sculpt/venv/lib/python3.8/site-packages/pandas/io/parsers.py", line 1917, in __init__
    self._reader = parsers.TextReader(src, **kwds)
  File "pandas/_libs/parsers.pyx", line 490, in pandas._libs.parsers.TextReader.__cinit__
  File "/Users/Developer/PycharmProjects/Sculpt/venv/lib/python3.8/site-packages/pandas/core/dtypes/common.py", line 2054, in pandas_dtype
    raise TypeError("data type not understood")
TypeError: data type not understood

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Вот однострочное решение:

data = pd.read_csv("scans.csv", parse_dates=['date'])

Теперь получаю хороший результат:

date         datetime64[ns]
muscle               object
side                 object
MQ(0-100)           float64
MQ(raw)               int64
fat                 float64
dtype: object
0 голосов
/ 02 ноября 2019

Столбцы "мышцы" и "боковые" имеют правильный тип d. Панды рассматривают строки как объектные типы. Это можно прочитать здесь: Документация панд

...