Как удалить столбцы без заголовков в пандах Python read_csv - PullRequest
0 голосов
/ 12 мая 2018

В настоящее время я должен прочитать файл CSV и заранее установить заголовки. А затем отбросьте столбцы, которые мне не нужны. Есть ли способ сделать это напрямую?

# Current Code
columns_name = ['station', 'date', 'observation', 'value', 'other_1', 
'other_2', 'other_3', 'other_4']
del_columns_name = ['other_1', 'other_2', 'other_3', 'other_4']
df =pd.read_csv('filename', names = columns_name)
df.drop(del_columns_name, axis=1)

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Я думаю, вы могли бы даже указать индексы сразу.В этом случае вы заинтересованы в: [0,1,2,3].Рассмотрим этот пример, который также анализирует даты.

import pandas as pd

cols = ['station', 'date', 'observation', 'value']

data = '''\
1, 2018-01-01, 1, 1, 1, 1, 1, 1
2, 2018-01-02, 2, 2, 2, 2, 2, 2'''

file = pd.compat.StringIO(data)
df = pd.read_csv(file, names=cols, usecols=[0,1,2,3], parse_dates=[1])

print(df)

Возвращает:

   station       date  observation  value
0        1 2018-01-01            1      1
1        2 2018-01-02            2      2
0 голосов
/ 12 мая 2018

Один из способов - использовать два списка для разрешения требуемых индексов и имен столбцов.

Затем использовать usecols и names аргументы для pd.read_csv для указания индексов столбцов.и имена соответственно.

idx, cols = list(zip(*((i, x) for i, x in enumerate(columns_name) \
                 if x not in del_columns_name)))

df = pd.read_csv('filename', usecols=idx, names=cols, header=None)

Как объяснено в документации, вы также должны явно указать header=None, когда заголовок отсутствует.

Объяснение

  • Используйте выражение генератора для итерации columns_name и удаления элементов, не входящих в del_columns_name.
  • Используйте enumerate для извлечения индексов.
  • Используйте zip для создания отдельных кортежейдля индексов и имен столбцов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...