簡體   English   中英

使用慣用Python刪除pandas列中的空格和換行符?

[英]Remove space and newlines in pandas columns using idiomatic Python?

我使用下面的方法來替換pandas dataframe列標題中的所有空格和換行符。

我的問題是:

使用下面代碼中的列表推導循環是一種更有效的方法嗎?

def headerfiller(df):
    for i in [" ","\n"]:
        df.columns = [c.replace(i,"_") for c in df.columns]

您可以使用可用於索引對象的字符串方法,在本例中為columns.str.replace() ,它允許您在不自行循環值的情況下執行此操作:

In [23]: df = pd.DataFrame(np.random.randn(3,3), columns=['a\nb', 'c d', 'e\n f'])

In [24]: df.columns
Out[24]: Index([u'a\nb', u'c d', u'e\n f'], dtype='object')

In [25]: df.columns.str.replace(' |\n', '_')
Out[25]: Index([u'a_b', u'c_d', u'e__f'], dtype='object')

通過使用正則表達式,您可以同時替換空格和換行符。 請參閱文檔: http//pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.replace.html (對於Series,但方法與Index相同)

使用str.translate

>>> tbl = str.maketrans(' \n', '__')
>>> 'a b c\n'.translate(tbl)
'a_b_c_'

try:
    tbl = str.maketrans('_ \n', '__')  # Python 3.x
except AttributeError:
    import string
    tbl = string.maketrans('_ \n', '__')  # Python 2.x

def headerfiller(df):
    df.columns = [c.translate(tbl) for c in df.columns]

使用正則表達式替換:

>>> import re
>>> re.sub(r'[ \n]', '_', 'a b c\n')
'a_b_c_'

import re

def headerfiller(df):
    df.columns = [re.sub(r' \n', '_', c) for c in df.columns]

你可以split()'_'.join()

def headerfiller(df):
    df.columns = ['_'.join(c.split()) for c in df.columns]

它會丟失尾隨空格和換行符(如果這很重要)並將多個空格等壓縮為單個“_”:

In [26]: "_".join("a  b    c\n\n\n".split())
Out[26]: 'a_b_c'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM