2016-09-16 3 views
1

У меня есть файл xlsx с более чем 1000 столбцами данных. Сначала я хотел бы разобрать каждый второй столбец из файла данных (который может содержать числа и буквы), а затем создать уникальный список из проанализированных данных.Создание уникального списка с использованием Pandas

Я полный noob & попробовал цикл «для» и «сделать пока», но ни один из них не работал для меня.

До сих пор у меня есть:

import pandas as pd 
    workbook = pd.read_excel('C:\Python27\Scripts\Data.xlsx') 
    worksheet = workbook.sheetname='Data' 

    for col in range(worksheet[0], worksheet[1300]): 
     print(col) 

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

Благодаря

+0

Извините, если вы скажете, что каждая вторая колонка означает, что вы имеете в виду только 2-й столбец или каждый столбцы? также вы хотите получить какой-либо глобальный список или список за столбец? Также вы посмотрели ['unique'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.unique.html#pandas.Series.unique)? – EdChum

+0

Спасибо Ed, это каждая четная колонка - 0,2,4,6,8 и т. Д., Или A, C, E, G, I до AWK. Всего 1286 столбцов, поэтому я хотел бы составить список из 643 из них, а затем создать уникальный список из этого списка. Я определенно использую pandas.series.unique(), но я не уверен, как получить 643 столбца в один список. –

ответ

2

Вы можете перебрать столбцам нарезка и используя шаг агд т.е. df.ix[:, ::2]

In [35]: 
df = pd.DataFrame({'a':1, 'b':[1,2,3,4,5], 'c':[2,3,4,5,6], 'd':0,'e':np.random.randn(5)}) 
df 

Out[35]: 
    a b c d   e 
0 1 1 2 0 -0.352310 
1 1 2 3 0 1.189140 
2 1 3 4 0 -1.470507 
3 1 4 5 0 0.742709 
4 1 5 6 0 -2.798007 

здесь мы делаем шаг каждые 2 колонки:

In [37]: 
df.ix[:,::2] 

Out[37]: 
    a c   e 
0 1 2 -0.352310 
1 1 3 1.189140 
2 1 4 -1.470507 
3 1 5 0.742709 
4 1 6 -2.798007 

мы можем просто позвонить np.unique на весь df, чтобы получить единый массив из всех уникальных значений:

In [36]: 
np.unique(df.ix[:,::2]) 

Out[36]: 
array([-2.79800676, -1.47050675, -0.35231005, 0.74270934, 1.  , 
     1.18914011, 2.  , 3.  , 4.  , 5.  , 6.  ]) 
+0

Очень приятно. В общем, при вызове функций «numpy» нет необходимости называть 'as_matrix'? Я смутно помню, что «sklearn» расстроен, если я этого не делаю. –

+0

@AmiTavory Я думал, что в наши дни sklearn был намного лучше в отношении обработки dfs и серий в качестве аргументов данных, но довольно часто я просто передавал 'df.values', я думаю, что' np' очень хорошо играет с dataframes, исторически были некоторые случаи, когда 'np' неправильно называет' __array__' атрибут, но в последнее время его часто не встречал – EdChum

+0

Спасибо, ребята, я почти там. Кажется, я все еще возвращаю все данные при печати: df.ix [:, :: 2]. Np.unique() все равно должен работать, верно? –

Смежные вопросы