実現したいこと
sample1.txtは次のようなファイルです。
[-0.5 -0.3 -0.2]
このファイルを読み込んで、
s1[0]=-0.5, s1[1]=-0.3, s1[2]=-0.2
となるようにしたいです。
「該当のソースコード」の3行目のように読み込んではうまくいきませんでした。どなたか直してください。(floatではなく、stringと認識している気がしています)
該当のソースコード
python
1import pandas as pd 2 3s1 = pd.read_csv('sample1.txt', header=None) 4print(s1) 5# 0 6#0 [-0.5 -0.3 -0.2] 7print('') 8print(s1[0]) 9#0 [-0.5 -0.3 -0.2] 10#Name: 0, dtype: object 11print('') 12print(s1[0][0]) 13#[-0.5 -0.3 -0.2] 14print(s1[0][0][0])#[ 15print(s1[0][0][1])#- 16print(s1[0][0][2])#0 17print(s1[0][0][3])#. 18print(s1[0][0][4])#5
試したこと
「該当のソースコード」で色々出力してみました。
5行目の0の意味がよく分かりませんでした。
13行目の[-0.5 -0.3 -0.2]の0番目の要素が-0.5と期待したのですが、出力してみると一文字ずつ格納されていることが分かりました。
> sample1.txtは次のようなファイルです。
> [-0.5 -0.3 -0.2]
以前の回答でこれらのデータは仕事で処理しているとのことでしたが、これは、この文字列が入っているファイルを何かのツールが吐き出すということなのですか?(カンマで区切られていないのでpythonで出しているということではなっそうではありますが)
しかも、ファイルにこれが1行だけですか?
>TakaiY様
コメントありがとうございます。
はい、別のpythonプログラムで吐き出しています。
二次元リストをnp.ravelで一次元にしたものです。
行数は一行です。(要素数はもっと多いです)
自分が分かりやすいように(何をやっているかがわかるように)少しずつ作っています。
最後に処理をまとめられるところはまとめる、省略できるところは省略すると思いますが、
現時点ではとりあえず最初から愚直に作る方針でやっています。
既に解決済みとは思いますが…
pandas の read_csvを生かして…
s1 = pd.read_csv("sample1.txt", header=None).iloc[0][0][1:-1].split(" ")
数値として取り出したいなら
s1 = list(map(float, pd.read_csv("test.txt", header=None).iloc[0][0][1:-1].split(" ")))
冒頭と最後の[]がなく、数値のみが空白区切りで格納されているなら
s1 = pd.read_csv("sample1.txt", header=None, sep=" ").iloc[0].values.tolist()
> YellowGreen さん
その場合、各要素は文字列(str)になります。
print(s1)
# ['-0.5', '-0.3', '-0.2']
なので、以下の様にするとよいかと思います。
s1 = pd.read_csv("sample1.txt", header=None).iloc[0, 0][1:-1].split(" ")
s1 = [*map(float, s1)]
print(s1)
# [-0.5, -0.3, -0.2]
melian 様
ご指摘ありがとうございます
入れ違いで追記修正していたところでした
途中処理をファイルに出して確認しながら進めるのはよくある方法かと思いますが、読み込むときのことを考えて、読み取りやすいような形で出力することを考えた方がいいですよ。
>YellowGreen様、melian様
できました。
どうもありがとうございました。
>YellowGreen様
回答欄にも記入をお願いします。
>bsdfan様
コメントありがとうございました。

回答3件
あなたの回答
tips
プレビュー