3

Web サイトからのデータの読み取りと書き込みに関して、約 2 時間前に質問しました。それ以来、過去 2 時間を費やして、出力の列 'A' から最大の日付値を読み取り、その値を更新された Web サイト データと比較し、上書きせずに新しいデータを csv ファイルに追加する方法を見つけようとしました。古いものまたは複製の作成。

現在 100% 動作しているコードは次のとおりです。

import requests
symbol = "mtgoxUSD"
url = 'http://api.bitcoincharts.com/v1/trades.csv?symbol={}'.format(symbol)
data = requests.get(url)
with open("trades_{}.csv".format(symbol), "r+") as f:
    f.write(data.text)

列「A」の最大値を見つけるさまざまな方法を試しました。「Dict」を使用するさまざまな方法と、最大の並べ替え/検索の他の方法、さらにはパンダとnumpy libsを使用する方法を試しました。どれもうまくいかないようです。誰かが.csvファイルから列の最大値を見つけるためのまともな方法を教えてもらえますか? ありがとう!

4

3 に答える 3

2

pandas DataFrame にある場合は、次のように任意の列の最大値を取得できます。

>>> max(data['time'])
'2012-01-18 15:52:26'

dataデータフレームの変数名timeで、列の名前です

于 2013-05-10T01:44:21.583 に答える
1

1 つは最大値を返すだけで、もう 1 つは最大値を含む CSV からの行を返します。

import csv
import operator as op
import requests

symbol = "mtgoxUSD"
url = 'http://api.bitcoincharts.com/v1/trades.csv?symbol={}'.format(symbol)
csv_file = "trades_{}.csv".format(symbol)

data = requests.get(url)
with open(csv_file, "w") as f:
    f.write(data.text)

with open(csv_file) as f:
    next(f) # discard first row from file -- see notes
    max_value = max(row[0] for row in csv.reader(f))

with open(csv_file) as f:
    next(f) # discard first row from file -- see notes
    max_row = max(csv.reader(f), key=op.itemgetter(0))

ノート:

  • max()直接イテレータを消費し、イテレータをcsv.reader()提供するので、それを渡すことができます。ヘッダー行を破棄する必要があるかもしれないと想定しているので、その方法を示しました。破棄するヘッダー行が複数ある場合はislice()itertoolsモジュールから使用することをお勧めします。

  • 最初のものでは、「ジェネレーター式」を使用して各行から単一の値を選択し、最大値を見つけます。これは「リスト内包表記」に非常に似ていますが、リスト全体を構築するのではなく、結果の値を反復処理できるようにするだけです。次にmax()iterable を消費し、最大値を取得します。

  • max()key=「キー関数」を指定する引数を使用できます。key 関数を使用して値を取得し、その値を使用して最大値を計算します...ただし、返される値max()は変更されていない元の値 (この場合は CSV の行の値) になります。この場合、主要な関数は次のように作成されoperator.itemgetter()ます...必要な列を渡し、その列operator.itemgetter()を取得する関数を作成します。

結果の関数は次と同等です。

def get_col_0(row):
    return row[0]
max_row = max(csv.reader(f), key=get_col_0)

または、人々はこれを使用lambdaします:

max_row = max(csv.reader(f), key=lambda row: row[0])

operator.itemgetter()でも便利で読みやすいと思います。そしてそれは速いです。

  • データをファイルに保存してから、ファイルから再度プルすることを示しました。どこにも保存せずにデータを調べたい場合は、行ごとに反復するだけです。

おそらく次のようなものです:

text = data.text
rows = [line.split(',') for line in text.split("\n") if line]
rows.pop(0)  # get rid of first row from data
max_value = max(row[0] for row in rows)
max_row = max(rows, key=op.itemgetter(0))
  • 必要な列がわからない...列「A」は列0の可能性があるため、上記では0を使用しました。列番号はお好みで置き換えてください。
于 2013-05-10T02:59:03.203 に答える
1

このようなものが動作するはずです:

import requests
import csv
symbol = "mtgoxUSD"
url = 'http://api.bitcoincharts.com/v1/trades.csv?symbol={}'.format(symbol)
data = requests.get(url)
with open("trades_{}.csv".format(symbol), "r+") as f:
    all_values = list(csv.reader(f))
    max_value = max([int(row[2]) for row in all_values[1:]])
(write-out-the-value?)

編集:「row[2]」を使用したのは、csv で最大値を取得していたサンプル列だったからです。また、すべてテキストである列ヘッダーを削除する必要があったため、2 行目からファイルの最後までの「all_values[1:]」を調べました。

于 2013-05-10T02:17:50.277 に答える