Jestem nowy w Pythonie i chciałbym użyć tego pięknego języka w moich badaniach danych wydobywczej. Mam teraz duży plik danych w ręce i niestety tożsamości próbek są zdefiniowane jako łańcuchy dołączone do liczb, coś takiego:

A, B1, B2, B3, C1, C2, C3
0,2,0.456,0.7,1.01,91,11,11.31.31.

Aby zbudować przydatny klasyfikator, muszę rozłączyć liczby z liter, dzięki czemu mogę ustawić cel, tj.

Set (['A', "B", "C"])

Najpierw potrzebuję, to stworzyć wyjście z rozebranymi nagłówkami, tak że nowy plik CSV powinien przeczytać:

A, B, B, B, C, C, C
0,2,0.456,0.7,1.01,91,11,11.31.31.

Ponieważ pliki, które mam bardzo masywny, chcę od mojej funkcji, aby poruszać się po kolumnach dużych liczb i pasować na nagłówki z numerów. Może być kodem zachowywać:

import numpy as np
import pandas as pnda
#from sklearn.linear_model import Ridge, Lasso
import string
import csv
import os

# Please don't pay attention to the first part of the code, it is just to load the file 

def get_file_path(filename):
    drkt = os.getcwd()
    file_path = os.path.join(drkt,filename)

    return file_path
    file_path = get_file_path('testing.csv')


def read_csv(file_path):
    data_file = open(file_path, 'rU')
    reader = csv.reader(data_file)
    headers_=reader.next()
print headers_ # Just to see the lines

Jest to na pewno bardzo prymitywny kod, ale chcę tylko zademonstrować punkt, w którym utknąłem. Zasadniczo chciałbym użyć "pasa (" 0123456789 =, ")" tylko na nagłówek "wiersz", ale nie wiem, jak osiągnąć ten punkt. Udało mi się zdarzyć nagłówki, ale znajduję mój kod wyciągnąć i rozebrać całą kolumnę, która nie jest tym, czego chcę, mam mianowicie rozebrać pierwszy wiersz w każdym pliku daty CSV.

Proszę zaakceptować moje przeprosiny, jeśli moja wiadomość jest długa lub jeśli nie udało mi się wyjaśnić mojego punktu.

Czekamy na wiadomość od twojej strony

1
Ahmed Abdelrahman 16 sierpień 2014, 05:06

2 odpowiedzi

Najlepsza odpowiedź

Jak sugeruje @Whereswalden, jesteś prawie tam

import csv

def read_csv(file_path):
    data_file = open(file_path, 'rU')
    reader = csv.reader(data_file)
    headers_=reader.next()
    print headers_ # ['A', ' B1', ' B2', ' B3', ' C1', ' C2', ' C3']

    # Process headers outside of loop
    headers_ = [col.strip("0123456789=,") for col in headers_]
    print headers_ # ['A', ' B', ' B', ' B', ' C', ' C', ' C']

    for row in reader:
        # do what you want with the data rows
1
junnytony 16 sierpień 2014, 06:04

Nie rozumiem całkowicie tego, co pytasz, ale szukasz takiego funkcji?

 def remove_numbers(l):
     #Create string to use for output
     output = "";
     #loop through the input string
     for x in l:
        #Test to see what characters are NOT digits
         if not x.isdigit():
            #If it isn't a digit add it to the output string
            output += x
    #Return the output string
    return output

Ta funkcja ma ciąg jako wejście i usuwa znaki, które są cyfry. Uruchamianie tego wejścia A, B1, B2, B3, C1, C2, C3 Dostajesz ten wyjście 'A, B, B, B, C, C, C'. Przypuszczam, że możesz to uruchomić, zanim zrobisz inne przetwarzanie.

Edytuj: Wyrażenia regularne mogą być również używane do osiągnięcia tego celu

-1
user3282276 16 sierpień 2014, 01:28