繁体   English   中英

带有正则表达式的 Python df.loc

[英]Python df.loc with regex

我根据条件更改行值的日期框。

当前数据框:

import pandas as pd
import re
data = [['ACK_ID','TEXT',30],
        ['TOT_ACTIVE_PARTCP_CNT','NUMERIC'],
        ['ADMIN_SIGNED_DATE', "TEXT", 30],
        ['BENEF_RCVG_BNFT_CNT','NUMERIC'],
        ['SPONS_SIGNED_DATE','TEXT',30]]
df = pd.DataFrame(data, columns=['FIELD_NAME', 'TYPE','SIZE (only for text fields)'])

#Change all "NUMERIC" to "FLOAT" in ['TYPE'] column.
df.loc[df["TYPE"] == "NUMERIC", "TYPE"] = "FLOAT"

我还想更改在其 ['FIELD_NAME'] 条目中具有 'DATE' 的所有 ['TYPE'] 行。 我想使用正则表达式来捕获“日期”。

使用正则表达式的代码尝试:

df.loc[df["FIELD_NAME"] == r'^.*DATE+$', "TYPE"] = "DATE"

此代码根本不会更改数据框。

所需的输出是:

data = [['ACK_ID','TEXT',30],
        ['TOT_ACTIVE_PARTCP_CNT','FLOAT'],
        ['ADMIN_SIGNED_DATE', "DATE", 30],
        ['BENEF_RCVG_BNFT_CNT','FLOAT'],
        ['SPONS_SIGNED_DATE','DATE',30]]
df = pd.DataFrame(data, columns=['FIELD_NAME', 'TYPE','SIZE (only for text fields)'])

您可以使用简单的.str.contains

df.loc[df["FIELD_NAME"].str.contains("DATE"), "TYPE"] = "DATE"
print(df)

印刷:

              FIELD_NAME   TYPE  SIZE (only for text fields)
0                 ACK_ID   TEXT                         30.0
1  TOT_ACTIVE_PARTCP_CNT  FLOAT                          NaN
2      ADMIN_SIGNED_DATE   DATE                         30.0
3    BENEF_RCVG_BNFT_CNT  FLOAT                          NaN
4      SPONS_SIGNED_DATE   DATE                         30.0

您可以将str.contains与正则表达式一起使用。

df.loc[df['FIELD_NAME'].str.contains(r'^.*DATE+$'), 'TYPE'] = 'DATE'
print(df)

              FIELD_NAME   TYPE  SIZE (only for text fields)
0                 ACK_ID   TEXT                         30.0
1  TOT_ACTIVE_PARTCP_CNT  FLOAT                          NaN
2      ADMIN_SIGNED_DATE   DATE                         30.0
3    BENEF_RCVG_BNFT_CNT  FLOAT                          NaN
4      SPONS_SIGNED_DATE   DATE                         30.0

如果 Date 总是在最后,你也可以只使用str.endswith

df.loc[df['FIELD_NAME'].str.endswith('DATE'), 'TYPE'] = 'DATE'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM