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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

Q&A

0回答

1480閲覧

csvファイル・pandasの時と同じ処理がしたい

pcbginer

総合スコア25

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

0グッド

0クリップ

投稿2019/12/11 10:19

編集2019/12/11 12:30

目的

readlineを使用して、pandasを使用した時と同じ処理を作らなければいけない
具体的には、idという列の値が同じだったら、datatimeの差を求め、それを新たな列として追加して、idが同じものがない列は消去したい

現状

途中のプログラム

python

1import linecache 2import sys 3import datetime 4import csv 5 6args = sys.argv; 7filename = args[1]; 8 9mylist = []; 10a = 1; 11n = 2; 12with open(filename,'r') as f: 13 line = f.readline(); 14 15 while line: 16 17 lines1 = line.split(',') 18 mylist.append(lines1) 19 line = f.readline() 20 21for i in mylist: 22 23 if(mylist[a][3] == mylist[n][3]): 24 print(mylist[n]) 25 n += 1; 26 a += 1; 27 28f.close() 29### 途中のプログラムの実行結果 30```Terminal 31TestMacBook-Pro:~ test$ cd Desktop 32TestMacBook-Pro:Desktop test$ python test.py test.csv 33['2019-02-21 17:15:15.700000', '車線2', 'right', '9', '1237', '257', '132', '170\n'] 34['2019-02-21 17:16:12.700000', '車線2', 'right', '213', '1241', '357', '131', '152\n'] 35['2019-02-21 17:19:11.400000', '車線2', 'right', '533', '1204', '299', '126', '148\n'] 36Traceback (most recent call last): 37 File "test.py", line 24, in <module> 38 if(mylist[a][3] == mylist[n][3]): 39IndexError: list index out of range 40
pandasのプログラム ```python import pandas as pd ip = input("計算するcsvファイル名を入力してください(例:test5.csv):") print(ip) distance = int(input("距離を入力してください(メートル):")) print(distance) #csvファイルの読み込み df = pd.read_csv(f"./{ip}", parse_dates=['datetime']) #idが同じのがあったら、秒速を求め #時刻を秒速にしたものである df['speed'] = df.groupby('id')['datetime'].apply(lambda d: distance / d.diff().shift(-1).dt.total_seconds()) #分速バージョンこの行を足すだけ) #df['speed'] /= 60; #時速バージョン(この行を足すだけ) #df['speed'] /= 3600; #csvファイルを秒速が表示したもの以外削除する df2 = df.dropna(how='any') print(df2) #csvファイルの書きだし(秒速の値をcsvファイルに書き込む) df2.to_csv('test4.csv')

入力csvファイル(pandas)

datetime,label,direction,id,x,y,w,h
2019-02-21 17:15:14.500000,車線1,right,9,719,407,147,175
2019-02-21 17:15:15.700000,車線2,right,9,1237,257,132,170
2019-02-21 17:15:33.300000,車線2,right,117,1313,375,195,167
2019-02-21 17:16:11.600000,車線1,right,213,746,504,141,142
2019-02-21 17:16:12.700000,車線2,right,213,1241,357,131,152
2019-02-21 17:16:12.700000,車線2,right,193,1176,289,138,161
2019-02-21 17:19:10.300000,車線1,right,533,851,396,140,161
2019-02-21 17:19:11.400000,車線2,right,533,1204,299,126,148
2019-02-21 17:20:14.800000,車線2,right,681,1211,312,140,153

#出力csvファイル(pandas)
,datetime,label,direction,id,x,y,w,h,speed
0,2019-02-21 17:15:14.500,車線1,right,9,719,407,147,175,38.33333333333333
3,2019-02-21 17:16:11.600,車線1,right,213,746,504,141,142,41.81818181818181
6,2019-02-21 17:19:10.300,車線1,right,533,851,396,140,161,41.81818181818181

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

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

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

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

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

y_waiwai

2019/12/11 11:18

で、しつもんはなんでしょうか
meg_

2019/12/11 12:23

・出力csvファイルは「pandasのプログラム」のアウトプットでしょうか? ・「途中のプログラム」の実行結果はどうなりますか?
pcbginer

2019/12/11 12:30

ご指摘ありがとうございました。 修正します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問