Конвертировать данные в формате pd в список

Явно говоря, this.foo означает (как вы поняли хорошо), что вас интересует свойство foo текущего объекта, на которое ссылается this. Поэтому, если вы используете: this.foo = 'bar';, вы собираетесь установить свойство foo текущего объекта, на которое ссылается this, равное bar.

Ключевое слово this в JavaScript не " t всегда означает то же самое, что и в C ++. Здесь я могу привести пример:

function Person(name) {
   this.name = name;
   console.log(this); //Developer {language: "js", name: "foo"} if called by Developer
}

function Developer(name, language) {
   this.language = language;
   Person.call(this, name);
}

var dev = new Developer('foo', 'js');

В приведенном выше примере мы вызываем функцию Person с контекстом функции Developer, поэтому this ссылается на объект, который будет создан Developer. Как вы можете видеть из результата console.log, результат this исходит из Developer. С первым аргументом метода call мы укажем контекст, с которым будет вызываться функция.

Если вы не используете this, просто созданное вами свойство будет локальной переменной , Поскольку вы, возможно, знаете, что JavaScript имеет функциональную область, поэтому переменная будет локальной, видимой только для функции, где она объявлена ​​(и, конечно же, все это дочерние функции, объявленные внутри родителя). Вот пример:

function foo() {
    var bar = 'foobar';
    this.getBar = function () {
        return bar;
    }
}

var f = new foo();
console.log(f.getBar());  //'foobar'

Это верно, если вы используете ключевое слово var. Это означает, что вы определяете bar как локальную переменную, если вы забудете var, к сожалению bar станет глобальным.

function foo() {
    bar = 'foobar';
    this.getBar = function () {
        return bar;
    }
}

var f = new foo();
console.log(window.bar);  //'foobar'

Именно локальная область может помочь вам добиться конфиденциальности и инкапсуляции, которая являются одним из самых больших преимуществ ООП.

Пример реального мира:

function ShoppingCart() {
    var items = [];

    this.getPrice = function () {
       var total = 0;
       for (var i = 0; i < items.length; i += 1) {
          total += items[i].price;
       }
       return total;
    }

    this.addItem = function (item) {
        items.push(item);
    }

    this.checkOut = function () {
        var serializedItems = JSON.strigify(items);
        //send request to the server...
    }
}

var cart = new ShoppingCart();
cart.addItem({ price: 10, type: 'T-shirt' });
cart.addItem({ price: 20, type: 'Pants' });
console.log(cart.getPrice()); //30

Еще один пример преимуществ области JavaScript - это шаблон модуля . В шаблоне модуля вы можете имитировать конфиденциальность, используя локальную функциональную область JavaScript. При таком подходе вы можете иметь как частные свойства, так и методы. Вот пример:

var module = (function {

    var privateProperty = 42;

    function privateMethod() {
        console.log('I\'m private');
    }
    return {

       publicMethod: function () {
           console.log('I\'m public!');
           console.log('I\'ll call a private method!');
           privateMethod();
       },

       publicProperty: 1.68,

       getPrivateProperty: function () {
           return privateProperty;
       },

       usePublicProperty: function () {
           console.log('I\'ll get a public property...' + this.publicProperty);
       }

    }
}());

module.privateMethod(); //TypeError
module.publicProperty(); //1.68
module.usePublicProperty(); //I'll get a public property...1.68
module.getPrivateProperty(); //42
module.publicMethod(); 
/*
 * I'm public!
 * I'll call a private method!
 * I'm private
 */

Есть немного странный синтаксис с отключением безпользовательских анонимных функций, но забудьте об этом на данный момент (он просто выполняет функцию после ее инициализации). Функциональность можно увидеть на примере использования, но преимущества связаны главным образом с предоставлением простого публичного интерфейса, который не включает в себя все детали реализации. Для более подробного объяснения шаблона вы можете увидеть ссылку, которую я поставил выше.


Надеюсь, что с информацией this :-) я помог вам понять несколько основных тем JavaScript.

0
задан Jorge Mendes 11 March 2019 в 13:49
поделиться

1 ответ

Вы можете использовать Series.str.strip с Series.str.split :

df['new'] = df[0].str.strip('[]').str.split()
print (df)
                   0                   new
0  ["A" "B" "C" "D"]  ["A", "B", "C", "D"]
1         [8 3 6 11]         [8, 3, 6, 11]
2          [5 7 4 3]          [5, 7, 4, 3]
3                 14                  [14]

Если необходимы смешанные данные - list со скалярами добавить Series.mask для применимого решения только для значений, начинающихся с [, проверенных Series.str.startswith :

df['new'] = df[0].mask(df[0].str.startswith('['), df[0].str.strip('[]').str.split())
print (df)
                   0                   new
0  ["A" "B" "C" "D"]  ["A", "B", "C", "D"]
1         [8 3 6 11]         [8, 3, 6, 11]
2          [5 7 4 3]          [5, 7, 4, 3]
3                 14                    14
0
ответ дан jezrael 11 March 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: