如何删除Dataframe列中的字符串子串?

MEh*_*san 9 python regex string dataframe pandas

我有这个简化的数据帧:

ID, Date
1 8/24/1995
2 8/1/1899 :00
Run Code Online (Sandbox Code Playgroud)

如何使用pandas的功能来识别数据框中有额外的日期:00并删除它.

知道如何解决这个问题吗?

我尝试过这种语法,但没有帮助:

df[df["Date"].str.replace(to_replace="\s:00", value="")]
Run Code Online (Sandbox Code Playgroud)

输出应该是:

ID, Date
1 8/24/1995
2 8/1/1899
Run Code Online (Sandbox Code Playgroud)

Psi*_*dom 9

您需要将修剪后的列分配回原始列而不是进行子集化,并且该str.replace方法似乎没有to_replacevalue参数.它有patrepl参数:

df["Date"] = df["Date"].str.replace("\s:00", "")

df
#   ID       Date
#0   1  8/24/1995
#1   2   8/1/1899
Run Code Online (Sandbox Code Playgroud)


piR*_*red 5

要将其应用于整个数据框,我stack然后unstack

df.stack().str.replace(r'\s:00', '').unstack()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

功能化的

def dfreplace(df, *args, **kwargs):
    s = pd.Series(df.values.flatten())
    s = s.str.replace(*args, **kwargs)
    return pd.DataFrame(s.values.reshape(df.shape), df.index, df.columns)
Run Code Online (Sandbox Code Playgroud)

例子

df = pd.DataFrame(['8/24/1995', '8/1/1899 :00'], pd.Index([1, 2], name='ID'), ['Date'])

dfreplace(df, '\s:00', '')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


rng = range(5)
df2 = pd.concat([pd.concat([df for _ in rng]) for _ in rng], axis=1)

df2
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

dfreplace(df2, '\s:00', '')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述