Python Pandas: чтение определенных столбцов из cdv, затем изменение порядка

#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] in pd.read_csv(...)[fields]

3. У меня есть столбцы даты, которые читаются с помощью pandas в формате: ГГГГ-ММ-ДД чч: мм: сс, но нужен только ГГГГ-ММ-ДД Какой самый лучший и простой способ отключить чч: мм: сс во всех строках?

4. @f0rd42, вы можете попробовать следующее: df['date_col_name'] = df['date_col_name'].dt.date — он должен работать, если он datetime имеет dtype

5. df.dtypes показывает мне, что это тип «object», хотя я пытался читать csv с parse_dates=True