Python: очистка данных из файла CSV, который не соответствует - PullRequest
0 голосов
/ 15 ноября 2018

Я новичок в программировании. Я пытаюсь очистить данные из файла CSV для дальнейшего расширения проекта. CSV-файл, который приводится в качестве входных данных, действительно грязный, и мне нужны только его отдельные части.

Входной файл выглядит следующим образом: enter image description here

Обязательный формат: enter image description here

Пока я пытаюсь извлечь значение для 'OBSERVATION_MODE', 'LON' и 'LAT', но я не уверен, как добавить более поздние значения. Это то, что я пробовал до сих пор:

import csv
import re

file = csv.reader(open('1mvn_kp_iuvs_2018_01_r01.tab.csv','r'))
mode = []
lat = []
for row in file:
    for values in row:
        if 'OBSERVATION_MODE' in values:
            print("\n")
            mode.append(row)

        if re.search('LAT', values):
            lat.append(row)

print(mode)
print(lat)

Я почти уверен, что логика, над которой я пытаюсь работать, совсем не полезна. Может кто-нибудь, пожалуйста, дайте мне лучший обзор этого? Я тоже пытался искать в Интернете, но не нашел ничего, что могло бы очистить данные, когда строки и столбцы не совпадают. Любая помощь приветствуется!

Спасибо

Ссылка на файл inut csv и ожидаемый результат: https://drive.google.com/open?id=1LJxxbDcplSCPVWKnOC3usx7kZE8dS32H

Обратите внимание, что ожидаемый вывод 'Cleaned_sample.xlsx' - это то, что я сгенерировал вручную, и я хочу аналогичный вывод с использованием программирования на Python.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

попробуйте это,

import pandas as pd
df1=pd.read_csv('1mvn_kp_iuvs_2018_01_r01.tab (1).csv',header=None,nrows=18)
dic=df1.set_index(0)[2].to_dict()
for u,v in dic.items():
    dic[u]=[v]
df1= pd.DataFrame(dic)
df2=pd.read_csv('1mvn_kp_iuvs_2018_01_r01.tab (1).csv',skiprows=19)
df1 =  pd.concat([df1]*len(df2),ignore_index=True)
df3=pd.concat([df1,df2],axis=1)
print df3.head()

Примечание. Я удалил несколько строк из исходного файла, чтобы сделать их идентичными для вашего образца.

Введите:

enter image description here

Выход:

         LAT  LAT_MSO  LOCAL_TIME       LON  LON_MSO  MARS_SEASON_LS  \
0 -19.512522      NaN    8.083779  6.757075      NaN       108.81089   
1 -19.512522      NaN    8.083779  6.757075      NaN       108.81089   
2 -19.512522      NaN    8.083779  6.757075      NaN       108.81089   
3 -19.512522      NaN    8.083779  6.757075      NaN       108.81089   
4 -19.512522      NaN    8.083779  6.757075      NaN       108.81089   

   MARS_SUN_DIST  ORBIT_NUMBER      SC_ALT  SC_GEO_LAT     ...       \
0       1.630965        6330.0  203.680405  -17.815445     ...        
1       1.630965        6330.0  203.680405  -17.815445     ...        
2       1.630965        6330.0  203.680405  -17.815445     ...        
3       1.630965        6330.0  203.680405  -17.815445     ...        
4       1.630965        6330.0  203.680405  -17.815445     ...        

   SUBSOL_GEO_LON        SZA  ALTITUDE          CO2         CO2+            O  \
0         65.4571  71.790688        80  -9999999000  -9999999000  -9999999000   
1         65.4571  71.790688        90  -9999999000  -9999999000  -9999999000   
2         65.4571  71.790688       100  -9999999000  -9999999000  -9999999000   
3         65.4571  71.790688       110  -9999999000  -9999999000  -9999999000   
4         65.4571  71.790688       120  -9999999000  -9999999000    551467460   

            N2            C            N            H  
0  -9999999000  -9999999000  -9999999000  -9999999000  
1  -9999999000  -9999999000  -9999999000  -9999999000  
2  -9999999000  -9999999000  -9999999000  -9999999000  
3  -9999999000  -9999999000  -9999999000  -9999999000  
4    710188930  -9999999000  -9999999000  -9999999000  
0 голосов
/ 15 ноября 2018

Вы должны попытаться использовать функцию read_csv из pandas. Есть несколько ключевых слов, таких как header, skiprows или usecols, которые позволяют вам указать, где ваши данные начинаются в файле, пропустить количество строк, использовать только определенные столбцы и т. Д. Возвращенный объект похож на массив, и вы можете легко получить доступ к вашим данным.

Пример на основе предоставленного вами файла:

data = pandas.read_csv(path_to_file, skiprows=44, skipfooter=378, engine='python', dtype='float')

Этот вызов будет читать первый набор данных, который у вас есть в вашем файле. Чтобы получить доступ к пятому значению в столбце ВЫСОТА, вы можете, например, сделать

data['ALTITUDE'][4]

Тогда вам придется использовать аналогичный вызов read_csv с разными значениями skiprows и skipfooter для доступа к другим наборам данных. Как только вы соберете их все, вызов для объединения из numpy должен позволить вам хранить все ваши данные в одном массиве. Будьте осторожны с заголовками.

Обратите внимание, что лямбда-выражения можно использовать в skiprows, это может позволить вам вызывать read_csv () только один раз, если вы найдете шаблон, который вы можете использовать, чтобы указать, какие строки вам не нужны.

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