Найти - Пользователи
Полная версия: Перезапись элемента в двумерной структуре данных pandas
Начало » Python для новичков » Перезапись элемента в двумерной структуре данных pandas
1
Volodya
Здравствуйте!

Подскажите пожалуйста, как поменять в двумерной структуре данных 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, но это не подходит т.к. в этом случае нельзя перезаписать этот же элемент.
Подскажите, как можно сделать?
Volodya
Уже разобрался как перебрать все элементы 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)
doza_and
Volodya
но в файле дробная часть от целой отделена запятой
Если читать из xlsx этого не будет. А так я у себя первым делом после установки винды в настройках локали меняю разделитель целой и дробной части с запятой но точку. Без этого вообще не жизнь а сплошное страдание в винде.
Volodya
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/.
Был бы очень благодарен!
doza_and
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 и не требуется никаких поисков в интернете.

Попробуйте покороче изложить проблему.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB