Уведомления

Группа в Telegram: @pythonsu

#1 Март 9, 2020 09:50:00

Volodya
Зарегистрирован: 2020-02-13
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Перезапись элемента в двумерной структуре данных pandas

Здравствуйте!

Подскажите пожалуйста, как поменять в двумерной структуре данных pandas элемент?

Если у меня есть считанные из Excel данные с помощью метода

pandas.read_csv()
, но в файле дробная часть от целой отделена запятой. Мне нужно вроде как пробежаться по ячейкам и поменять “,” на “.” и преобразовать во float, и еще заменить значение пустой ячейки “None” на “0”.

Сначала пытался это сделать через цикл for с индексами:
 def Not_None_str (dataset):
    for x in range(0,dataset[0]):
        for j in range(0,dataset[1]):
            if dataset[i,j]!=None:
                dataset[i,j]=float(str(dataset[i,j]).replace(',','.'))
            else:
                dataset[i,j]=float(0)
    return dataset
Не получилось потому что pandas не возвращает размерность уровня массива (и метода такого не нашел).
Потом хотел сделать с помощью forech, но это не подходит т.к. в этом случае нельзя перезаписать этот же элемент.
Подскажите, как можно сделать?

Офлайн

#2 Март 9, 2020 14:56:39

Volodya
Зарегистрирован: 2020-02-13
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Перезапись элемента в двумерной структуре данных pandas

Уже разобрался как перебрать все элементы dataset'а:

 def Not_None_str (dataset):
   
    for i in range(0,len(dataset)):
        for j in range(0,len(dataset[i])):
            if pd.isna(dataset[i,j]):
              dataset[i,j]=float(0)
           
    return dataset

Но вот от ‘nan’ избавится не удается. Не помогает и :
 dataset_xl = pd.concat([dataset_xl_O, dataset_xl_Or, dataset_xl_I])
X_ = dataset_xl[['L', 'C', 'D']].values
X=pd.DataFrame(X_)
X.fillna(0)

Отредактировано Volodya (Март 9, 2020 18:53:25)

Офлайн

#3 Март 10, 2020 03:51:45

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Перезапись элемента в двумерной структуре данных pandas

Volodya
но в файле дробная часть от целой отделена запятой
Если читать из xlsx этого не будет. А так я у себя первым делом после установки винды в настройках локали меняю разделитель целой и дробной части с запятой но точку. Без этого вообще не жизнь а сплошное страдание в винде.



Офлайн

#4 Март 10, 2020 17:22:51

Volodya
Зарегистрирован: 2020-02-13
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Перезапись элемента в двумерной структуре данных pandas

doza_and
Если читать из xlsx этого не будет. А так я у себя первым делом после установки винды в настройках локали меняю разделитель целой и дробной части с запятой но точку. Без этого вообще не жизнь а сплошное страдание в винде.

С этим получилось разобраться следующим образом:
 def Not_None_str(dataset):
    mask = dataset.isna()
    for i in range(0,len(dataset)):
        for j in range(0,len(dataset.iloc[i])):
            if (mask.iat[i, j]) == True:
                dataset.iat[i, j]=float(0)
            elif dataset.iat[i, j]=='-':
                  dataset.iat[i, j]=0                  
            else: dataset.iat[i, j]=float(str(dataset.iat[i, j]).replace(',','.').replace(' ',''))
            
    return dataset

А Вы с регрессией в sklearn имели дело?
Можете подсказать - http://python.su/forum/topic/38539/.
Был бы очень благодарен!

Офлайн

#5 Март 10, 2020 21:52:50

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Перезапись элемента в двумерной структуре данных pandas

Volodya
С этим получилось разобраться следующим образом:
Это ужасно.
мало того что это крайне неэффективно, но и подвержено ошибкам из за сложности.

Обычно вместо этих многократных переформатирований и преобразований достаточно просто правильно указать опции при импорте csv файла.
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
см. decimal, na_values, na_filter

Volodya
А Вы с регрессией в sklearn имели дело?
Да я имел дело.

Регрессии строятся в том числе и для полиномов от многих переменных (что вообще совершенно несущественно если посмотреть документацию).

Но это
 return X, X_fit, y_lin_fit, linear_r2, y_quad_fit, quadratic_r2, y_cubic_fit, cubic_r2, y
 def PlotPolynomRelationPredict (X, X_fit, y_lin_fit, linear_r2, y_quad_fit, quadratic_r2, y_cubic_fit, cubic_r2, y):
еще ужаснее.

Это питон а не java.

Вам надо выделить ту часть которая вызывает ошибку и ее показать общественности. А в той каше кода которыую вы привели маловероятно что кто-то будет разбираться. Тем более что для построения регрессии вполне достаточно документации scikit-learn и не требуется никаких поисков в интернете.

Попробуйте покороче изложить проблему.



Отредактировано doza_and (Март 10, 2020 22:01:09)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version