#python #pandas
#python #pandas
Вопрос:
У меня есть csv, который мне нужно обработать и записать обратно. Мне нужны только определенные столбцы (с заголовком) и измените их порядок.
Я использую:
fields = ['Ticket Number', 'Created', 'Closed', 'CustomerID', 'Customer Realname']
df = pd.read_csv('args.inname', sep=',', skipinitialspace=True, usecols=fields, columns='Created', 'Ticket Number', 'Customer Realname', 'CustomerID', 'Closed')
df = df.rename(columns={'Ticket Number': 'CaseNumber', 'Created': 'CreationDate', 'Closed': 'ClosedDate', 'CustomerID': 'EndCustomerEmail', 'Customer Realname': 'EndCustomerName'})
но он выдает
Ошибка синтаксиса: позиционный аргумент следует за аргументом ключевого слова
сразу после второй строки после того, как я расширил ее с помощью «column =», чтобы изменить порядок сразу после чтения
Я уверен, что здесь я упускаю что-то очевидное, но не могу его найти.
Комментарии:
1. параметр
columns
должен быть назван какnames
, и он ожидает список:names=['Created', 'Ticket Number', 'Customer Realname', 'CustomerID', 'Closed']
2. @MaxU тоже пробовал это, но получил обратную трассировку (последний последний вызов): файл «<input>», строка 1, в <module> Ошибка типа: parser_f() получил неожиданный аргумент ключевого слова ‘columns’
3. Я отредактировал свой предыдущий пост — пожалуйста, проверьте…
4. @f0rd42, поскольку вы уже выбираете подмножество столбцов через
usecols
, вам здесь не нуженnames
аргумент.5. @NickilMaveli, таким образом, OP может установить отсутствующие имена столбцов и выбрать интересные из них за один шаг. Но
header=None
в этом случае он должен был бы указать, поэтому я немного смущен…
Ответ №1:
Попробуйте это:
# specify your columns in the order you want to have it in the ouptut file
fields = ['Ticket Number', 'Created', 'Closed', 'CustomerID', 'Customer Realname']
df = pd.read_csv('args.inname', sep=',', skipinitialspace=True, usecols=fields)[fields]
df = df.rename(columns={'Ticket Number': 'CaseNumber', 'Created': 'CreationDate', 'Closed': 'ClosedDate', 'CustomerID': 'EndCustomerEmail', 'Customer Realname': 'EndCustomerName'})
Комментарии:
1. Уже пробовал это (указывая порядок в «fields =», но порядок соответствует исходному порядку файлов, так что только выбирает столбцы, но принимает порядок из исходного входного файла
2. @f0rd42, обратите внимание на
[fields]
inpd.read_csv(...)[fields]
3. У меня есть столбцы даты, которые читаются с помощью pandas в формате: ГГГГ-ММ-ДД чч: мм: сс, но нужен только ГГГГ-ММ-ДД Какой самый лучший и простой способ отключить чч: мм: сс во всех строках?
4. @f0rd42, вы можете попробовать следующее:
df['date_col_name'] = df['date_col_name'].dt.date
— он должен работать, если онdatetime
имеет dtype5. df.dtypes показывает мне, что это тип «object», хотя я пытался читать csv с parse_dates=True