Я впервые использую pandas и хотел провести анализ данных для набора данных Movielens. После запуска кода для набора данных 1M я захотел поэкспериментировать с Movielens 20M
Я читаю только один файл, т.е. ratings.csv
Однако я столкнулся с множеством проблем с набором данных 20M, и, потратив много времени, я понял, что это происходит потому, что типы читаемых столбцов не соответствуют ожидаемым.
Следующий код (где путь - это путь файла ratings.csv)
import pandas as pd
import numpy as np
df = pd.read_csv('../data/ml-20m/ratings.csv',sep=',',names=
['userId','movieId','rating','timestamp'],engine='python', dtype=
{'userId':np.int32, 'movieId':np.int32, 'rating':np.float64,
'timestamp':np.int64}, skipinitialspace=True, error_bad_lines=False)
выдаёт мне следующую ошибку: -
Traceback (последний вызов был последним): File
"/Home/sahildeep/.local/lib/python3.5/site-packages/pandas/io/parsers.py",
строка 1663, в _cast_types
values = astype_nansafe (values, cast_type, copy = True) Файл "/home/sahildeep/.local/lib/python3.5/site-packages/pandas/core/dtypes/cast.py",
строка 709, в astype_nansafe
вернуть lib.astype_intsafe (arr.ravel (), dtype) .reshape (arr.shape) Файл "pandas / _libs / lib.pyx", строка 456, в
pandas._libs.lib.astype_intsafe Файл "pandas / _libs / src / util.pxd",
строка 142 в util.set_value_at_unsafe ValueError: неверный литерал для
int () с основанием 10: 'movieId'
Во время обработки вышеуказанного исключения произошло другое исключение:
Traceback (последний вызов был последним): файл "test.py", строка 4, в
df = pd.read_csv ('../ data / ml-20m / ratings.csv', sep = ',', names = ['userId', 'movieId', 'rating', 'timestamp'], engine = ' python ', dtype =
{'userId': np.int32, 'movieId': np.int32, 'rating': np.float64,
'timestamp': np.int64}, skipinitialspace = True, error_bad_lines = False)
файл
"/Home/sahildeep/.local/lib/python3.5/site-packages/pandas/io/parsers.py",
строка 678, в parser_f
вернуть _read (filepath_or_buffer, kwds) файл "/home/sahildeep/.local/lib/python3.5/site-packages/pandas/io/parsers.py",
строка 446, в _read
data = parser.read (nrows) Файл "/home/sahildeep/.local/lib/python3.5/site-packages/pandas/io/parsers.py",
строка 1036, в чтении
ret = self._engine.read (nrows) Файл "/home/sahildeep/.local/lib/python3.5/site-packages/pandas/io/parsers.py",
строка 2272, в чтении
data = self._convert_data (data) Файл "/home/sahildeep/.local/lib/python3.5/site-packages/pandas/io/parsers.py",
строка 2338, в _convert_data
clean_conv, clean_dtypes) Файл "/home/sahildeep/.local/lib/python3.5/site-packages/pandas/io/parsers.py",
строка 1574, в _convert_to_ndarrays
cvals = self._cast_types (cvals, cast_type, c) Файл "/home/sahildeep/.local/lib/python3.5/site-packages/pandas/io/parsers.py",
строка 1666, в _cast_types
"type% s"% (column, cast_type)) ValueError: Невозможно преобразовать столбец movieId в тип
В основном я хочу пропустить все строки, тип данных которых не соответствует словарю
{'userId': np.int32, 'movieId': np.int32, 'rating': np.float64,
'Метка времени': np.int64}
Если я не передам аргумент dtype для read_csv, то все четыре столбца окажутся типа «объект», что не то, что я хочу.
Я искал в Google и не нашел никого, кто сталкивался с этой проблемой. Вы можете мне помочь?
Я использую python3