🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

1177閲覧

csvファイル python pandasを使って、特定の行に値を入れたい

pcbginer

総合スコア25

CSV

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/11/25 23:33

編集2019/11/26 00:49

python

1 2# -*- coding: utf-8 -*- 3import pandas as pd 45#csvファイルの読み込み 6df = pd.read_csv("./test2.csv") 78#datetimeとidの列だけを抽出する 9df = df[["datetime","id"]] 1011#datatimeの数値の形式を計算処理ができる形にする 12df["new"] = pd.to_datetime(df["datetime"]) 1314#速度処理(秒速) 15i = 0 16a = 1 17while i <= 8 and a < 8: 1819 #idが同じのがあったら、秒速を求める 20 if df.iloc[i][1] == df.iloc[a][1]: 2122 #分が同じ時は、秒数だけを計算する 23 if df["new"][i].minute == df["new"][a].minute: 24 df["speed"] = 50 // (df["new"][a].second - df["new"][i].second) 25 print(50 // (df["new"][a].second - df["new"][i].second)) 2627 #分を秒に変えて、計算する 28 else: 29 df["speed"] = 50 // ((df["new"][a].minute - df["new"][i].minute) * 60 + (df["new"][a].second - df["new"][i].second)) 3031 #elif df.iloc[i][1] != df.iloc[a][1]: 32 #df["speed"] = "nothing" 3334 i += 1 35 a += 1 3637#csvファイルの出力形式の確認 38print(df) 3940#csvファイルの書きだし(秒速の値をcsvファイルに書き込む) 41df.to_csv('test2.csv') 42

質問

仕事の方で、csvファイルをpythonのpandasを使用して書き込みの作業を行なっているのですが、pandasを使って、特定の行にそれぞれ違う値をいれることは可能でしょうか?
可能ならば、参考サイトなど、具体的な方法を教えていただけるとありがたいです

読み込むcsvファイル

,datetime,id
0,2019-02-21 17:15:14.500000,9
1,2019-02-21 17:15:15.700000,9
2,2019-02-21 17:15:33.300000,117
3,2019-02-21 17:16:11.600000,213
4,2019-02-21 17:16:12.700000,213
5,2019-02-21 17:16:12.700000,193
6,2019-02-21 17:19:10.300000,533
7,2019-02-21 17:19:11.400000,533
8,2019-02-21 17:20:14.800000,681

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

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

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

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

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

tachikoma

2019/11/26 00:17

何か試してみましたか?コードがないとどこで躓いているのか分かりません。
pcbginer

2019/11/26 00:50

ご指摘ありがとうございます。コードの方と、読み込むcsvファイルの方は記載されていただきました。
guest

回答2

0

ベストアンサー

たぶんやりたいことはこんな感じではないかと想像しておりますが、いかがでしょうか。

Python

1# -*- coding: utf-8 -*- 2import pandas as pd 3 4#csvファイルの読み込み 5df = pd.read_csv("./test2.csv", index_col=0, parse_dates=['datetime']) 6 7for i in df.index[:-1]: 8 #idが同じのがあったら、秒速を求める 9 if df.loc[i, 'id'] == df.loc[i+1, 'id']: 10 df.loc[i, 'speed'] = 50 / (df.loc[i+1, "datetime"] - df.loc[i, "datetime"]).total_seconds() 11 12#csvファイルの出力形式の確認 13print(df) 14# datetime id speed 15#0 2019-02-21 17:15:14.500 9 41.666667 16#1 2019-02-21 17:15:15.700 9 NaN 17#2 2019-02-21 17:15:33.300 117 NaN 18#3 2019-02-21 17:16:11.600 213 45.454545 19#4 2019-02-21 17:16:12.700 213 NaN 20#5 2019-02-21 17:16:12.700 193 NaN 21#6 2019-02-21 17:19:10.300 533 45.454545 22#7 2019-02-21 17:19:11.400 533 NaN 23#8 2019-02-21 17:20:14.800 681 NaN

大きい修正点としては、

  • CSVを読み込む際のread_csv()のパラメータとしてindex_colparse_datesを追加
  • 時間の差の計算は、わざわざ分と秒毎に計算する必要なく、そのまま引いてtotal_seconds()にて秒を取得
  • DataFrameの特定のセルへの値の代入は df.loc[行のindex値, 列のColumn名] = value にて行う

となります。(セルの値の取得も同様です)
ただ上記の方法だと、同じID値でも行が連続でないとSpeedを求めないので、下記のように groupby('id') と一旦IDでグループをまとめた後に Speedを計算したほうが良い気がします

Python

1import pandas as pd 2 3#csvファイルの読み込み 4df = pd.read_csv("./test2.csv", index_col=0, parse_dates=['datetime']) 5#idが同じのがあったら、秒速を求める 6df['speed'] = df.groupby('id')['datetime'].apply(lambda d: 5 / d.diff().shift(-1).dt.total_seconds()) 7#csvファイルの出力形式の確認 8print(df) 9# datetime id speed 10#0 2019-02-21 17:15:14.500 9 41.666667 11#1 2019-02-21 17:15:15.700 9 NaN 12#2 2019-02-21 17:15:33.300 117 NaN 13#3 2019-02-21 17:16:11.600 213 45.454545 14#4 2019-02-21 17:16:12.700 213 NaN 15#5 2019-02-21 17:16:12.700 193 NaN 16#6 2019-02-21 17:19:10.300 533 45.454545 17#7 2019-02-21 17:19:11.400 533 NaN 18#8 2019-02-21 17:20:14.800 681 NaN

投稿2019/11/26 02:21

magichan

総合スコア15898

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

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

pcbginer

2019/11/26 02:23

ご丁寧なご対応ありがとうございます。すごく丁寧に教えてくださったので、感動しました。そして、とても勉強になりました。また、分からないときがあったら、よろしくお願いいたします。
guest

0

それそのまま、「csvファイル python pandas」でぐぐると参考になるページが出てきますぜ

投稿2019/11/26 00:22

y_waiwai

総合スコア88038

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問