2016-06-15 4 views
2

Вопрос является probaly крайне тупой, но я больно мой мозг выяснить, что делатьПанды dataframe и to_numeric: выберите столбец по индексу

Существует pd.dataframe с N столбцов. Мне нужно, чтобы выбрать несколько столбцов, ссылаясь на индексе столбца, а затем преобразовать все значения в числовой и переписать этот столбец в моем dataframe

Я сделал это с помощью ссылки на имя столбца (например df['a'] = pd.to_numeric(df['a']), но застрял с индексами (например, df[1] = pd.to_numeric(df[1])

Что такое правильный путь в этой ситуации dataframe колонке ссылок (питон 2.7)

ответ

3

Вы можете использовать ix для выбора столбцов, а затем applyto_numeric:

import pandas as pd 

df = pd.DataFrame({1:['1','2','3'], 
        2:[4,5,6], 
        3:[7,8,9], 
        4:['1','3','5'], 
        5:[5,3,6], 
        6:['7','4','3']}) 

print (df) 
    1 2 3 4 5 6 
0 1 4 7 1 5 7 
1 2 5 8 3 3 4 
2 3 6 9 5 6 3 

print (df.dtypes) 
1 object 
2  int64 
3  int64 
4 object 
5  int64 
6 object 
dtype: object 

print (df.columns) 
Int64Index([1, 2, 3, 4, 5, 6], dtype='int64') 
cols = [1,4,6]  
df.ix[:, cols] = df.ix[:, cols].apply(pd.to_numeric) 

print (df) 
    1 2 3 4 5 6 
0 1 4 7 1 5 7 
1 2 5 8 3 3 4 
2 3 6 9 5 6 3 

print (df.dtypes) 
1 int64 
2 int64 
3 int64 
4 int64 
5 int64 
6 int64 
dtype: object 

Если столбцы strings, не int (но это выглядит как int) добавить '' к номерам в listcols:

import pandas as pd 

df = pd.DataFrame({'1':['1','2','3'], 
        '2':[4,5,6], 
        '3':[7,8,9], 
        '4':['1','3','5'], 
        '5':[5,3,6], 
        '6':['7','4','3']}) 

#print (df) 

#print (df.dtypes) 

print (df.columns) 
Index(['1', '2', '3', '4', '5', '6'], dtype='object') 

#add `''` 
cols = ['1','4','6'] 
#1. ix: supports mixed integer and label based access  
df.ix[:, cols] = df.ix[:, cols].apply(pd.to_numeric) 

#2. loc: only label based access 
# df.loc[:, cols] = df.loc[:, cols].apply(pd.to_numeric) 

#3. iloc: for index based access 
# cols = [i for i in range(len(df.columns))] 
# df.iloc[:, cols].apply(pd.to_numeric) 

print (df) 
    1 2 3 4 5 6 
0 1 4 7 1 5 7 
1 2 5 8 3 3 4 
2 3 6 9 5 6 3 

print (df.dtypes) 
1 int64 
2 int64 
3 int64 
4 int64 
5 int64 
6 int64 
dtype: object 
+0

Спасибо, это хорошо. Но есть ли способ ссылки на столбец с заголовком non-int с int? Я имею в виду ссылку на 6-й столбец в «Индекс (['1', '2', '3', '4', '5', 'k'], dtype = 'object')' с 'cols = [6] '? –

+0

Да, вы можете использовать ['iloc'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iloc.html) - так что 6 столбцов:' df.iloc [: , 5] '(число python от 0) – jezrael

+0

Хорошо работает, спасибо! –

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

  • Нет связанных вопросов^_^