在没有列名的情况下跨数据框替换值的优雅方法
Elegant way to replace values across dataframe without column names
我有一个如下所示的数据框
df = pd.DataFrame({'person_id': [101,101,101,101],
'start_date':['NA-NA-NA NA:NA:NA','Nil','06/06/2014 08:00:00 AM','06/06/2014 05:00:00 AM'],
'desc':['-','- ',' - ','test-date'],
'type':['test-date','actual-version','depat-head','oxygen-parlor']})
我想用 np.nan
替换值 NA-NA-NA NA:NA:NA
、Nil
、-
我尝试了以下
df.replace(['NA-NA-NA NA:NA:NA','Nil','-', np.nan)
df.dropna(subset=['person_id','start_date','desc','type'], how='any')
虽然上面的方法在一定程度上有效,但它并不准确,因为它没有考虑带有 spaces -
或 -
等的连字符。请注意 [=不应替换 type
列中的 15=]。
可以帮助我在不使用列名的情况下跨数据框替换精确值(但 space 个字符除外)吗?
我希望我的输出如下所示
person_id start_date desc type
101 06/06/2014 05:00:00 AM test-date oxygen-parlor
您可以使用正则表达式替换整个数据框:
terms = ['NA-NA-NA NA:NA:NA', 'Nil', '-']
regex = r'^\s*(?:' + '|'.join(terms) + r')\s*$'
df = df.replace(regex, np.nan, regex=True)
这里使用的正则表达式模式是^\s*(?:NA-NA-NA NA:NA:NA|Nil|-)\s*$
,并且只会匹配NA
字符串,-
和Nil
当它们是一列的全部内容时(但不仅仅是子字符串)。
df.replace(regex=['Nil|NA|^-'], value=np.nan).dropna()
person_id start_date desc type
3 101 06/06/2014 05:00:00 AM test-date oxygen-parlor
我有一个如下所示的数据框
df = pd.DataFrame({'person_id': [101,101,101,101],
'start_date':['NA-NA-NA NA:NA:NA','Nil','06/06/2014 08:00:00 AM','06/06/2014 05:00:00 AM'],
'desc':['-','- ',' - ','test-date'],
'type':['test-date','actual-version','depat-head','oxygen-parlor']})
我想用 np.nan
NA-NA-NA NA:NA:NA
、Nil
、-
我尝试了以下
df.replace(['NA-NA-NA NA:NA:NA','Nil','-', np.nan)
df.dropna(subset=['person_id','start_date','desc','type'], how='any')
虽然上面的方法在一定程度上有效,但它并不准确,因为它没有考虑带有 spaces -
或 -
等的连字符。请注意 [=不应替换 type
列中的 15=]。
可以帮助我在不使用列名的情况下跨数据框替换精确值(但 space 个字符除外)吗?
我希望我的输出如下所示
person_id start_date desc type
101 06/06/2014 05:00:00 AM test-date oxygen-parlor
您可以使用正则表达式替换整个数据框:
terms = ['NA-NA-NA NA:NA:NA', 'Nil', '-']
regex = r'^\s*(?:' + '|'.join(terms) + r')\s*$'
df = df.replace(regex, np.nan, regex=True)
这里使用的正则表达式模式是^\s*(?:NA-NA-NA NA:NA:NA|Nil|-)\s*$
,并且只会匹配NA
字符串,-
和Nil
当它们是一列的全部内容时(但不仅仅是子字符串)。
df.replace(regex=['Nil|NA|^-'], value=np.nan).dropna()
person_id start_date desc type
3 101 06/06/2014 05:00:00 AM test-date oxygen-parlor