выбрать конкретные столбцы в CSV / DF с переменным заголовком Python - PullRequest
0 голосов
/ 04 мая 2018

У меня есть несколько файлов CSV, которые содержат варианты одной и той же информации. Я хочу извлечь столбцы из каждого из них на основе ключевых слов. Однако заголовок каждого файла не обязательно начинается с 1-й строки, что затрудняет определение статической переменной для ´skiprows = ´.

Вот несколько примеров CSV

CSV1

Here are the instructions that you should follow.
Follow them closely, OK, to define the Type and Place.

Type    Number  Place   Exists
cat 2   home    yes
dog 2   field   yes
fish    3   sea yes

CSV2

   .



I know have this type of information.
This is not easy to define when the location and style are the same.

Animal Style    Quantity    Location    Exists
horse   3   field   yes
lion    2   safari  no
tiger 3 jungle  yes


CSV3

Number  Local   Species
2   home    rabbit
3   tank    turtle
3   sea shark   

Подход «pandas», которому бы я следовал, если бы все «CSV» имели легко идентифицируемый заголовок, был следующим:

colFilters = ['number','local','species','style','quantity','location','type','number','place']
df = read_CSV(CSV1,skip_blanks_rows=True)
df.columns = map(str.lower, df.columns)
df = df.filter(regex='|'.join(colFiltersFilters),axis=1) 
df.head

Я мог бы пропустить строки, которые не содержат ключевых слов, но есть ключевые слова, которые иногда появляются в «инструкциях», которые расположены в разных местах над заголовком.

Есть ли способ, которым «панды» могут использовать конкретную информацию для идентификации столбцов заголовка? Есть ли лучший подход к этой проблеме, чем просто полагаться на информацию заголовка и / или количество заголовков?

1 Ответ

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

То есть ваши строки хранятся в столбце 1? Что если вы отбросите все значения NULL при чтении ваших данных? После этого вы можете переименовать заголовки столбцов в первой строке.

import pandas as pd
import numpy as np
df = pd.read_csv(r'CSV1',header=None)
df=df.dropna()
df=df.rename(columns=df.iloc[0])
df=df.drop(df.index[[0]])
df.head(10)

Если у вас есть пропущенные значения в каком-либо другом столбце, я бы удалил все строки, содержащие '.'. Или удалите все строки, которые имеют более 2 пропущенных значений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...