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

时间:2016-08-01 19:37:39

标签: python regex string pandas dataframe

我有这个简化的数据框:

ID, Date
1 8/24/1995
2 8/1/1899 :00

如何使用pandas的强大功能识别数据框中有额外:00的任何日期并将其删除。

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

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

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

输出应该是:

ID, Date
1 8/24/1995
2 8/1/1899

2 个答案:

答案 0 :(得分:7)

您需要将修剪过的列指定回原始列而不是进行子集化,并且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

答案 1 :(得分:4)

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

df.stack().str.replace(r'\s:00', '').unstack()

enter image description here

官能化

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)

实施例

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

dfreplace(df, '\s:00', '')

enter image description here

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

df2

enter image description here

dfreplace(df2, '\s:00', '')

enter image description here