0

1 秒あたり複数のデータ行を含む csv ファイルがあり、1 秒あたりの平均データ値を取得する必要があります。入力データ (> 2000 行) は次のようになります。

11:24:13,1.518
11:24:13,1.576
11:24:13,1.529
11:24:14,1.529
11:24:14,1.576
11:24:14,1.565
11:24:14,1.553
11:24:15,1.506
11:24:15,1.482
11:24:15,1.541
11:24:15,1.576
11:24:15,1.506
...
12:00:20,1,508

出力は次のようになります。

11:24:13,1.541
11:24:14,1.555
11:24:15,1.522
...
12:00:20,1,508

以下の回答はすでに非常に役に立ちましたが、pandas で数千の時間値の平均を取得しようとすると、最初と最後の 15 行しか取得できません。

time
2013-10-30 11:24:12    1.5341
2013-10-30 11:24:13    1.5658
2013-10-30 11:24:14    1.5480
2013-10-30 11:24:15    1.5517
2013-10-30 11:24:16    1.5411
2013-10-30 11:24:17    1.5247
2013-10-30 11:24:18    1.5248
2013-10-30 11:24:19    1.5082
2013-10-30 11:24:20    1.4588
2013-10-30 11:24:21    1.6187
2013-10-30 11:24:22    1.5470
2013-10-30 11:24:23    1.5211
2013-10-30 11:24:24    1.5812
2013-10-30 11:24:25    1.5457
2013-10-30 11:24:26    1.5411  
...
2013-10-30 12:00:36    1.631900
2013-10-30 12:00:37    1.671900
2013-10-30 12:00:38    1.596400
2013-10-30 12:00:39    1.616500
2013-10-30 12:00:40    1.691700
2013-10-30 12:00:41    1.720000
2013-10-30 12:00:42    1.660100
2013-10-30 12:00:43    1.530700
2013-10-30 12:00:44    1.621200
2013-10-30 12:00:45    1.643600
2013-10-30 12:00:46    1.591600
2013-10-30 12:00:47    1.562300
2013-10-30 12:00:48    1.612900
2013-10-30 12:00:49    1.589500
2013-10-30 12:00:50    1.560667
Name: value, Length: 2199, dtype: float64

だから私は再び立ち往生しており、2199行のそれぞれの平均で時間値のみを取得する方法がわかりませんか? したがって、次のようになります。

11:24:13,1.541
11:24:14,1.555
11:24:15,1.522
...
12:00:20,1,508

どうもありがとう!

4

1 に答える 1

4

パンダはそのために作られました。DataFrame投稿したデータを含む文字列から を作成していることに注意してください。ほとんどの場合、おそらく CSV ファイルで作業し、pandas はread_csv.

d = """
11:24:13,1.518
11:24:13,1.576
11:24:13,1.529
11:24:14,1.529
11:24:14,1.576
11:24:14,1.565
11:24:14,1.553
11:24:15,1.506
11:24:15,1.482
11:24:15,1.541
11:24:15,1.576
11:24:15,1.506
"""

import pandas as pd

# get the data in shape
csvish = map(lambda row: row.split(','), filter(lambda s: s, d.split('\n')))

df = pd.DataFrame(csvish, columns=('time', 'value'))

# convert to sensible types (read_csv can do this implicitly)
df.time = pd.to_datetime(df.time)
df.value = df.value.astype(float)

df.groupby('time').value.mean()

次のような出力が得られます。

# outputs:

# time
# 2013-10-23 11:24:13    1.54100
# 2013-10-23 11:24:14    1.55575
# 2013-10-23 11:24:15    1.52220

脚注:

を使用read_csvして日付を解析するには、次の方法で実行できますparse_dates

df = pd.read_csv(StringIO.StringIO(d[1:]), header=None, parse_dates=[0])

コンストラクターの使用は、次のDataFrame方法で実行できますnp.array

df = pd.DataFrame(np.array([(datetime.datetime.strptime(row[0], "%H:%M:%S"), 
                  row[1]) for row in csvish]), columns=('time', 'value'))
于 2013-10-23T15:18:30.883 に答える