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

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

詳細はこちら
CSV

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python

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

pandas

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2563閲覧

pandasでfor文を用いると処理できない

TKWTsan

総合スコア8

CSV

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python

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

pandas

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/11/01 09:20

編集2019/11/01 14:12

5分ごとに計測する機器が1か月間計測したデータがあり、そのデータの欠損している時刻の値を補完するプログラムを組みました。

補完の方法は、全データから、その欠損しているデータの時間帯と曜日が一致しているデータをすべて抽出し、その平均値を欠損値とするという方法です。

作成したプログラムを実行してみたのですが、実行速度がとても遅く実行できませんでした。
追記:実行したところ以下のようなエラーが発生しました。

PYTHON

1File "pandas\_libs\lib.pyx", line 2279, in pandas._libs.lib.to_object_array 2numpy.core._exceptions.MemoryError: Unable to allocate array with shape (3440828, 10) and data type object 3

pandasにfor文に適用すると処理速度が遅くなるようなので、for文を使わずにこの処理を行う方法があればご指摘いただきたいです。

PYTHON

1import pandas as pd 2 3df = pd.read_csv("aaa.csv",encoding="shift-jis",engine = "python") 4 5df['時刻'] = pd.to_datetime(df['時刻']) 6 7#欠損している時刻の補完 8date_df = pd.DataFrame(pd.date_range('2018/09/01 00:00:00', '2018/09/30 23:55:00', freq='5T'), columns=['時刻']) 9id_df = pd.DataFrame(df['計測地点番号'].unique(), columns=['計測地点番号']) 10 11date_df['key'] = 0 12id_df['key'] = 0 13tmp_df = date_df.merge(id_df, on='key').drop('key', axis=1) 14 15sum_df = pd.DataFrame(df.groupby(['計測地点番号', '時刻']).sum()['断面交通量']).reset_index() 16sum_df = tmp_df.merge(sum_df, on=['時刻', '計測地点番号'], how='left') 17sum_df.fillna(0) 18 19#欠損している時刻の、ある値の補完 20for index, row in sum_df.iterrows(): 21 if row['断面交通量'] ==0: 22 dt1= dt[dt['時刻'].dt.dayofweek == row['時刻'].dt.dayofweek] 23 dt2= dt1[dt1['時刻'].strftime('%H:%M') == row['時刻'].strftime('%H:%M')] 24 sum_df.at[index,'断面交通量']=dt2['断面交通量'].mean() 25 26print(sum_df) 27

下に示すリンクの「一般道路の「断面交通量情報」 (2019年8月分)」がほぼ同じ形式のデータになります。
同じ形式のデータ
プログラムでは2018年9月ですが,用意できたデータは2019年8月のみでした。

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

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

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

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

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

TKWTsan

2019/11/01 10:01

修正いたしました。
meg_

2019/11/01 11:11

「実行速度がとても遅く実行できませんでした。」とのことですが、  ・コード自体はエラーなく実行できましたか?  ・データは何Gですか?  ・メモリ、CPUの能力は不足していませんか?
TKWTsan

2019/11/01 12:38

ご指摘ありがとうございます。 確認してみます。
TKWTsan

2019/11/01 14:09

追記:コードを実行したところ以下のようなエラーが発生しました。 File "pandas\_libs\lib.pyx", line 2279, in pandas._libs.lib.to_object_array numpy.core._exceptions.MemoryError: Unable to allocate array with shape (3440828, 10) and data type object データの容量は300MBほどでした。
tiitoi

2019/11/01 15:32

パソコンのメモリが足りなくてエラーになっているのではないでしょうか。
guest

回答1

0

自己解決

初歩的なミスをいくつか修正した後,十分なメモリのPCで実行することができました.
ご指摘ありがとうございました。

投稿2019/11/05 13:42

TKWTsan

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問