2015-03-27 2 views
0

У меня есть большой файл csv, который я не могу загрузить в память. Мне нужно найти переменные постоянными. Как я могу это сделать? Я читаю CSV какpandas найти постоянные переменные в огромном файле csv

d = pd.read_csv(load_path, header=None, chunksize=10) 

Есть элегантный способ решить эту проблему?

Данные содержат строки и числовые переменные

+0

Вы говорите, что все значения строк одинаковы? Вы можете загрузить csv в куски, а затем сравнить 'value_counts() == len (df)' – EdChum

+0

, вы имеете в виду перебирать куски и проверять каждый раз? – Donbeo

+0

Можете ли вы определить, в чем проблема на самом деле, вы можете загружать в каждом столбце для всего csv и проверять, совпадают ли все значения или загружать куски, а затем сравнить уникальность значений на каждой итерации. – EdChum

ответ

0

Это мое текущее медленно решение, которое не использует панда

constant_variables = [True for i in range(number_of_columns)] 
    with open(load_path) as f: 
     line0 = next(f).split(',') 
     for num, line in enumerate(f): 
      line = line.split(',') 
      for i in range(n_col): 
       if line[i] != line0[i]: 
        constant_variables[i] = False 
      if num % 10000 == 0: 
       print(num) 
0

У вас есть 2 метода я могу думать перебирать каждый столбец и проверки на уникальность:

col_list = pd.read_csv(path, nrows=1).columns 
for col in range(len(col_list)): 
    df = pd.read_csv(path, usecols=col) 
    if len(df.drop_duplicates()) == len(df): 
     print("all values are constant for: ", df.column[0]) 

или перебрать CSV на куски и снова проверить длину:

for df in pd.read_csv(path, chunksize=1000): 
    t = dict(zip(df, [len(df[col].value_counts()) for col in df])) 
    print(t) 

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