私は、日付オブジェクトを持つインデックスとストリングで埋められた列 "PSM"からなるデータフレームを持っています。これらの文字列は、さまざまな型またはNaNにすることができます。可能な形式の1つは、 "5%"、 "3%"、 "%3"などすべての種類の類似形式です。データフレームの条件付きで選択された行のフィルタ番号
目標は、PSMの%-signを含む行をフィルタリングし、 。。など、 "5%" は5に変更しなければならないので、整数として番号、 "%3" と3に "3%" と
は、私はいろいろなことを試してみました:
使用forループを使用して
in
を使用してint(filter(str.isdigit, string))
を使用して値を変更しようとしましたが、実際にxを変更する方法については頭を悩ますことはできません。for x in df.PSM: if '%' in x: do "int(filter(str.isdigit, string))" to x
また、for-loopsは常に疑わしいものにしてしまい、私はこれを行うためのもっとpythonicな方法を探しました。私はいろいろな可能性を見出しましたが、そのうちの1人を働かせることはできませんでした
test['%' in test.PSM] = ?
のうちの1つですが、私は右端でint(filter(str.isdigit, string))
を動作させる方法を知りません。df.loc['%' in df.PSM, int(filter(str.isdigit, df.PSM))]
のようなものも機能しませんでした。
私には2つの質問があります。 forループのボディを、私が望むように動作させる方法を教えてください。 そして、よりエレガントなやり方が必要だと思うのですが、その代わりに何が数字にフィルタをかけるためにもっと無愛想な方法がありますか? Exampledataframeと
編集:
data = ["% 5", "5%, ", "3%", "k52%"]
col = ["PSM"]
todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date-datetime.timedelta(4), periods=4, freq='D')
df = pd.DataFrame(data, index=index, columns=col)
これは、次のようになります。
PSM
2017-07-08 % 5
2017-07-09 5%,
2017-07-10 3%
2017-07-11 k52%
私はそれがそのようになりたい:
PSM
2017-07-08 5
2017-07-09 5
2017-07-10 3
2017-07-11 52
'string'には何を記入する必要がありますか? –
あなたの質問にはそこにあります。自問してみてください。 – Rahul
@ F.M:編集した解決策を試してください。 – Rahul