質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2266閲覧

python csv 1列ずつ処理をしたい

Tubasa1995

総合スコア83

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/01/16 17:33

編集2019/01/16 18:28

下記のようなコードを書きました.
今私がしたいことはvtkファイルというものをつくろうと思っています.
remove_history_7702-15402_3points.csvには7000行100列のデータが入っています.
1列ごとにそのタイムステップの各座標の値があります.
その1列ずつの値と,xyz_7702-15402_3ponts.csvの座標を結び付けるのですが,,,よく分かりません.

1列のみのときは成功しました.コートが載せてあります.
用は,100列のデータを1列ずつ取り出して,for文かなにかで
100個の7702-15402_3points_3delta_(k+1)step.vtkというファイルを作りたいのです.

どなたかご教授お願いします.

これがコードを回したときのエラーの出力です.
イメージ説明

###今回書いて失敗したコード

iimport pyvtk import numpy as np import pandas as pd FR="./xyz_7702-15402_3ponts.csv" XYZ=np.genfromtxt(FR, delimiter=",", skip_header=0) data = pd.read_csv("remove_history_7702-15402_3points.csv").values.tolist() for k in range(100): #colum = data[:,k] FR="./data.ix[:,k]" Q=np.genfromtxt(FR, skip_header=0) ## X と Y の座標の数を取得 XMAX=len(np.unique(XYZ[:,0])) YMAX=len(np.unique(XYZ[:,2])) ### polygon の構成ノードを格納 polygon= [[ XMAX*(i)+j, XMAX*(i+1)+j, XMAX*(i+1)+j+1, XMAX*(i)+j+1] for i in range(YMAX-1) for j in range(XMAX-1) ] structure=pyvtk.PolyData(points=XYZ, polygons=polygon) pointdata = pyvtk.PointData(pyvtk.Scalars(Q, name='point-scalar', lookup_table='default')) vtk = pyvtk.VtkData( structure, "# test", pointdata) vtk.tofile('7702-15402_3points_3delta_(k+1)step')

###cscが1列の時:成功したコード

#!/usr/bin/env python2.7 # coding: utf-8 # test.py import pyvtk import numpy as np FR="./xyz_1-7701_3ponts.csv" XYZ=np.genfromtxt(FR, delimiter=",", skip_header=0) FR="./rmv_1-7701_3points_3delta.csv" Q=np.genfromtxt(FR, skip_header=0) ## X と Y の座標の数を取得 XMAX=len(np.unique(XYZ[:,1])) YMAX=len(np.unique(XYZ[:,2])) ### polygon の構成ノードを格納 polygon= [[ XMAX*(i)+j, XMAX*(i+1)+j, XMAX*(i+1)+j+1, XMAX*(i)+j+1] # LL, LR, UR, UL の順番。 端を除外 for i in range(YMAX-1) for j in range(XMAX-1) ] structure=pyvtk.PolyData(points=XYZ, polygons=polygon) pointdata = pyvtk.PointData(pyvtk.Scalars(Q, name='point-scalar', lookup_table='default')) vtk = pyvtk.VtkData( structure, "# test", pointdata) vtk.tofile('1-7701_3points_3delta')

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/01/17 00:01

何度もお願いしていますが、Python対応不可なので回答依頼しないでください(そろそろ迷惑です)。その分、あなたは回答の機会を失していることになります。
guest

回答2

0

ベストアンサー

python

1 FR="./data.ix[:,k]" 2 Q=np.genfromtxt(FR, skip_header=0) 3

の部分で./data.ix[:,k]という名前のファイルを開こうとしていますから、当然「そんなファイルは見つからなかった」というエラーになります。

たぶん7201個のファイルがどこかに生成してあってループごとに1つずつ読み込みたいのかなぁ、という気がしますし、そうであればファイル名を適切に生成して引数に渡せばよいのでしょう。

そのへんの情報は質問文からは読み取れないので、上記以外に言えることはありません。

投稿2019/01/16 17:45

編集2019/01/16 17:46
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tubasa1995

2019/01/16 17:49

はい,その通りです.1列ずつ取り出して処理をしたいだけなんです. 例えば FR = data.ix[:,k] にすれば可能なのでしょうか. すいません.まだ,パイソン使い始めて1ヶ月もたってなくて,いろいろ試し試しでやっていて,, でも,どうしても急いで結果がほしくて,,すいません.
Tubasa1995

2019/01/16 17:53

ただ,FR = data.ix[:,k]とすると list indices must be integers, not tuple と出てくるのですが,どうすれば良いのでしょうか.,,,
Tubasa1995

2019/01/16 17:57

iteritemsというものを使えば良さそうなのですが, 多くの例の場合,ヘッダーがついていて,自分のやつとは少し違って どうすれば良いかわからないです.教えてもらえませんか.
hayataka2049

2019/01/16 18:02

申し訳ありませんが、状況がまったく見えないので回答に書いた以上のことは言えません。もしかしたらgenfromtxtを使いたい訳じゃないのかな? とかそういうことを思っている段階です。
Tubasa1995

2019/01/16 18:05

つまり,成功した,1列のみのコード内の rmv_1-7701_3points_3delta.csv は 100列の中の最初の1列目なんです. だから,自動的に100列目まで1列ずつ同じ処理をしたいんです.
hayataka2049

2019/01/16 18:25

いくつかわかっていないであろうことがあります。 ・dataを読み込むときにlist型に変換していますが、これによってその方法でアクセスすることは不可能になっています。 ・DataFrameだと仮定して、[:,k]のスライスはSeriesを返すでしょう。なのでファイル名の文字列にはどうやってもならないと思います。 ・100列目まで読み込みたい、のに7000強もループさせているので、何かしら混乱があると思います。 私から指摘できることはこれくらいしかないと思うので、あとはご自身でどうぞ。
Tubasa1995

2019/01/16 18:27

すいません... 今テストケースなので10列でやろうと思ってたんです.本来は7000列あるんです. いろいろご指摘ありがとうございました.
hayataka2049

2019/01/16 18:28

Tubasa1995さんに足りないものは、 ・プログラミング全般に対する習熟 ・基本的なpythonの書き方やライブラリの扱い方などの知識 ・自力で解決しようという意思 の3つくらいだと思います。上の2つは努力で改善できますが、最後のは「わからないことは人任せで解決しよう」という意思決定を覆さないとどうにもなりません。 時間がないということですが、わからないことがある度にここで質問するのが一番効率の悪い時間の使い方です。確かに上手く行けばコピペすれば動くコードを教えてもらえるかもしれませんが、成長しないのでまた同じレベルの質問を繰り返すことになります。それに、解決する保証、解決するまで教えてもらえる保証もありません。現にこの私も、この質問がちゃんと解決するまで面倒を見る気はまったくありません。ある程度手助けはするので自分でやってくれ、というスタンスで回答しています。 teratailでのぞみのコードが得られたとしましょう。質問が1つ解決するのに早くて数時間くらいはかかり、その間作業は止まったままです。この1ヶ月で30ほど質問されているようですが、数時間かける30で、オライリーの分厚い本でも10冊くらいは読み込めたんじゃないですか? 人に聞く代わりに基礎から勉強していれば、今頃はもう少し進捗が良かったのではないかと思います。 もしかしたら前にも同じようなことを書いたかもしれませんが(おぼろげな記憶があるが、別の人かもしれない)、基礎からちゃんと勉強するのがベストです。今からでも遅くはないと思うので、参考書とかを調べて、読み込んでください。そうしないと何も始まりません。
firedfly

2019/01/20 05:33

その場しのぎを重ねるしかない切羽詰まった状態では hayataka2049さんの親身でまっとうなコメントも届かないでしょうね……。 数年後にでも思い出して、急がば回れを実感してもらえるといいのですが。
Tubasa1995

2019/01/20 05:46

すいません,,,
firedfly

2019/01/20 05:57

卒論 or 修論かと思いますので気持ちはわかります。 周りのひとの力も借りて、全力で乗り切りましょう。
guest

0

推測に推測を重ねた砂上の楼閣みたいな回答をします

  • 前提

dataで表現されるデータの1列(列って縦方向のデータ)が意味のあるまとまりである
dataのk列のおそらく列名がファイル名であって、残りが何らかの座標データ

python

1df = pd.read_csv("somefile") #.valuesとかしない 2for n,s in df.iteritems(): 3 print(n) #列名 4 print(s.values.tolist()) #列のデータをリスト化

こういう感じであつかうんじゃないかと思います。
nをFRのファイル名とすればいいし、列のSeriesをリスト化すれば[]でアクセスして座標計算できるのでは?

iteritemsというものを使えば良さそうなのですが,

多くの例の場合,ヘッダーがついていて,自分のやつとは少し違って
どうすれば良いかわからないです.教えてもらえませんか.

別回答についているこのコメントを拝見するとヘッダがないみたいに見えるんですが、そうではないはず。ヘッダがないと(座標)データしかないはずでそこにファイル名があるっていうのは作りとして考えにくい。

回答からはやや外れるんですが、「行」と「列」って正しく認識なさってますよね?

投稿2019/01/17 03:30

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問