web-dev-qa-db-ja.com

データフレーム列の文字列の部分文字列を削除する方法は?

私はこの単純化されたデータフレームを持っています:

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
9
MEhsan

サブセット化を行う代わりに、トリミングされた列を元の列に戻す必要があります。また、str.replaceメソッドにto_replaceおよびvalueパラメーターがないようです。代わりにpatおよびreplパラメーターがあります。

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

df
#   ID       Date
#0   1  8/24/1995
#1   2   8/1/1899
8
Psidom

これをデータフレーム全体に適用するには、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

4
piRSquared