pandasデータフレーム内の私の列のタイプに問題があります。基本的に、列はcsvファイルに文字列として保存されます。これをタプルとして使用して、数値のリストに変換するには、次のように非常に単純なcsvがあります。
ID,LABELS
1,"(1.0,2.0,2.0,3.0,3.0,1.0,4.0)"
2,"(1.0,2.0,2.0,3.0,3.0,1.0,4.0)"
関数「read_csv」でロードすると、文字列のリストが表示されます。リストに変換しようとしましたが、文字列のリストバージョンを取得します。
df.LABELS.apply(lambda x: list(x))
戻り値:
['(','1','.','0',.,.,.,.,.,'4','.','0',')']
それを行うことができる方法について何か考えはありますか?
ありがとうございました。
あなたはタプルを与えるast.literal_eval
を使うことができます:
import ast
df.LABELS = df.LABELS.apply(ast.literal_eval)
リストが必要な場合は、次を使用します。
df.LABELS.apply(lambda s: list(ast.literal_eval(s)))
これを試すことができます(csv
がfilename.csv
):
df = pd.read_csv('filename.csv')
df['LABELS'] = df.LABELS.apply(lambda x: x.strip('()').split(','))
>>> df
ID LABELS
0 1 [1.0, 2.0, 2.0, 3.0, 3.0, 1.0, 4.0]
1 2 [1.0, 2.0, 2.0, 3.0, 3.0, 1.0, 4.0]
または、正規表現を検討することもできます。
pattern = re.compile("[0-9]\.[0-9]")
df.LABELS.apply(pattern.findall)