После написания такого кода:
import locale
import sys
from locale import atof
locale.setlocale(locale.LC_NUMERIC, '')
'en_GB.UTF-8'
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.tree import export_graphviz
from six import StringIO
from IPython.display import Image
import pydotplus
col_names = ['Project', 'OrderDate', 'orderid', 'ClientID','IsRepeat','IsBlocked','IsManual','AutoDecision','ManualApprove','IsLoan','ShortTermAmount','ShortTermPeriod','LongTermAmount','LongTermPeriod','RequestedAmount','RequestedPeriod','LoanSum','Period','ShortTermScore','LongTermScore']
#dtypes={"Project": bool, "OrderDate": 'str', "orderid": "str", "ClientID" : "str","IsRepeat" :bool,"IsBlocked":bool,"IsManual":bool,"AutoDecision":bool,"ManualApprove":bool,"IsLoan":bool}# "ShortTermAmount":"Int64","ShortTermPeriod":"Int64","LongTermAmount":"Int64","LongTermPeriod":"Int64","RequestedAmount":"Int64","RequestedPeriod":"Int64","LoanSum":"Int64","Period":"Int64","ShortTermScore":"float64","LongTermScore":"float64"}
dtypes={"orderid": object, "ClientID" : object,"RequestedAmount":object,"RequestedPeriod":object}
parse_dates = ['OrderDate']
test = pd.read_csv("/home/man/Test_task.csv",sep=' , ', thousands=',', header=None, dtype=dtypes ,names=col_names, parse_dates=parse_dates, converters = {'Project': lambda x: bool(str(x)) if x != '-' else np.nan, 'IsRepeat': lambda x: bool(str(x)) if x != '-' else np.nan, 'IsBlocked': lambda x: bool(str(x)) if x != '-' else np.nan,'orderid': lambda x: int(x.replace(',','')) if x != '-' else np.nan, 'IsManual': lambda x: bool(str(x)) if x != '-' else np.nan, 'AutoDecision': lambda x: bool(str(x)) if x != '-' else np.nan, 'ManualApprove': lambda x: bool(str(x)) if x != '-' else np.nan, 'IsLoan': lambda x: bool(str(x)) if x != '-' else np.nan})#.fillna(0)
df = pd.DataFrame(data=test)
test.head()
Я получаю ошибку invalid literal for int() with base 10: 'orderid'.
Если я не пишу в conversion
'orderid': lambda x: int(x.replace(',','')) if x != '-' else np.nan,
, то заголовок таблицы печатается, но потом, при попытке подействовать на элементы таблицы как на числа, получаю ошибку, что нельзя действовать так на строки, при том, что pandas распознаёт dtype всех колонок как "object", а, судя по всему, вообще как "str".
Почему? Прилагаю сам csv файл.
https://drive.google.com/file/d/1Oseh4KnE98tC3-jRy...
по совету MaxU, я добавил обрамляющие пробелы в sep. Стало лучше, колонки LoanSum, Period, ShortTermScore, LongTermScore наконец-то стали распознаваться как float64, однако, теперь в этих колонках вместо чисел стоят NaN, и другие числовые колонки все также имеют тип object(хотя и с правильными числами).