Вот как вы могли бы сделать это с помощью регулярного выражения (возможно, не рекомендуется):
pd.read_csv(StringIO(re.sub(',+',',',df.to_csv())))
Out[20]:
Name h1 h2 h3 h4
0 A 1 2 3 NaN
1 B 1 3 NaN NaN
2 C 1 3 2 NaN
Вы можете расширить DOM, используя прототип Элемента. Однако это не работает в IE7 и более ранних версиях. Вам нужно будет расширить конкретный элемент, по одному за раз. Библиотека прототипов делает это. Я рекомендую просмотреть источник , чтобы увидеть, как именно это делается.
Вы не должны напрямую расширять что-либо (под «чем-либо», я имею в виду нативные объекты DOM) - это приведет только к плохим вещам. Плюс повторное расширение каждого нового элемента (что нужно сделать для поддержки IE) добавляет дополнительные издержки.
Почему бы не воспользоваться подходом jQuery, создать упаковщик / конструктор и расширить его вместо этого:
var myDOM = (function(){
var myDOM = function(elems){
return new MyDOMConstruct(elems);
},
MyDOMConstruct = function(elems) {
this.collection = elems[1] ? Array.prototype.slice.call(elems) : [elems];
return this;
};
myDOM.fn = MyDOMConstruct.prototype = {
forEach : function(fn) {
var elems = this.collection;
for (var i = 0, l = elems.length; i < l; i++) {
fn( elems[i], i );
}
return this;
},
addStyles : function(styles) {
var elems = this.collection;
for (var i = 0, l = elems.length; i < l; i++) {
for (var prop in styles) {
elems[i].style[prop] = styles[prop];
}
}
return this;
}
};
return myDOM;
})();
Затем вы можете добавить свои собственные методы с помощью myDOM.fn
... И Вы можете использовать это так:
myDOM(document.getElementsByTagName('*')).forEach(function(elem){
myDOM(elem).addStyles({
color: 'red',
backgroundColor : 'blue'
});
});
Я нашел ответ в тот момент, когда писал вопрос, но подумал, что все равно отправлю, чтобы поделиться информацией.
Объект, который вам нужно расширить, это Element.prototype
.
Element.prototype.getMyId = function() {
return this.id;
};
Да, можно, но настоятельно не рекомендуется.
Если вы переопределяете что-то, что другая библиотека ожидает от оригинала, или другая библиотека перезаписала что-то, что вы ожидали ... хаос!
Лучше всего хранить код в своем собственном пространстве имен / области видимости.