、アイデアは、私はfile.txtと呼ばれるファイルを持っているということで、次のようになります。次のコードを最適化する方法は?
A:s:Y:0.1:0.1:0.1:0.2:0.1
B:r:D:0.3:0.5:0.1:0.2:0.2
C:f:C:0.3:0.4:0.2:-0.1:0.4
D:f:C:0.1:0.2:0.1:0.1:0.1
F:f:C:0.1:-0.1:-0.1:0.1:0.1
G:f:C:0.0:-0.1:0.1:0.3:0.4
H:M:D:0.1:0.4:0.1:0.0:0.4
と私は、セパレータとして使用したいです「:::」、私はこのルールに従っていくつかの文字列のための4つの列の値を置き換えたい:範囲1にさんを所属
すべての値は「N」で交換しようとしている。
range1=[-0.2,-0.1,0,0.1,0.2] -> 'N'
range2に属するすべての値は「L」のために交換することになるだろう:
range2=[-0.5,-0.4,-0.3] -> 'L'
レンジ3に属するすべての値が「H」に置き換えることしようとしている。
range3=[0.3,0.4,0.5]
これを達成するために、私は次のことを試してみました:
import pandas as pd
df= pd.read_csv('file.txt', sep=':',header=None)
labels=df[3]
range1=[-0.2,-0.1,0,0.1,0.2]
range2=[-0.5,-0.4,-0.3]
range3=[0.3,0.4,0.5]
lookup = {'N': range1, 'L': range2, 'H': range3}
for k, v in lookup.items():
df.loc[df[3].isin(v), 3] = k
for k, v in lookup.items():
df.loc[df[4].isin(v), 4] = k
for k, v in lookup.items():
df.loc[df[5].isin(v), 5] = k
for k, v in lookup.items():
df.loc[df[6].isin(v), 6] = k
for k, v in lookup.items():
df.loc[df[7].isin(v), 7] = k
print(df)
そして、それはうまく動作しますが、私は非常に多くのFORSの使用を避けたい、私はこれを達成する方法のいずれかの提案を感謝したいと思います。
ありがとうございます。はい、私のデータフレームには混在した列型が含まれていますが、私が最初に提示したアプローチは非常に便利で、私が探していたものです。 – neo33