-3


私はpythonの使用が初めてです。しかし、私のデータ処理で使用するために練習によって学びます.

ここに示すような形式のビッグ データ ファイルがあります。
行と列の数は常に不明です。この例では、2 つの連続した行が表示されています。
1 列目は「時間」で、n 列目は識別子から選択される関連データです (1 行目の「abc」)。

................
"2013-01-01 00:00:02" 228 227 15.65 15.84 14.85 14.68 14.53 13.75 12.45 12.55
"2013-01-02 00:01:03" 225 227 16.35 15.99 14.85 14.73 14.43 13.8 12.85 13.2
.................

望ましい出力

  1. 時間差を計算できるように、Column1 = 時間単位。
  2. 列 (n) = データはさらに処理されます。float である必要があります。

私の過去の試行では、リストになってしまうため、どちらの列も変換できません。

過去の質問と回答を検索してみました。しかし、私は初心者なので、すべてを解釈できませんでした。後で処理できるように、データを列形式に読み込むための迅速な支援を期待しています。より数学的な操作であるため、さらに処理を行うことができると思います。

本当にお世話になりました。

よろしく
ゴウリ

訂正-1: pandas、以前に必要だった列を抽出するためのコンパクトなバージョンを提供する
ことを理解しました。グループからの提案の後、良い学習。 コードは次のようになります。

import pandas as pd
data = pd.read_csv(fp, sep='\t')
entry=[]
entry = data['u90']
print entry, '\n', entry[5]

out_file = open("out.txt", "w")
entry.to_csv(out_file)

よろしく
ゴウリ

4

3 に答える 3

1

パンダではなく正規表現の使用に関心がある場合は、データセットに対して次のコードが機能します。

import re

#l1 = ["\"2013-01-01 00:00:02\" 228 227 15.65 15.84 14.85 14.68 14.53 13.75 12.45 12.55",
#"\"2013-01-02 00:01:03\" 225 227 16.35 15.99 14.85 14.73 14.43 13.8 12.85 13.2"]

l1 = """"2013-01-01 00:00:02\" 228 227 15.65 15.84 14.85 14.68 14.53 13.75 12.45 12.55
"2013-01-02 00:01:03\" 225 227 16.35 15.99 14.85 14.73 14.43 13.8 12.85 13.2"""

l_match = re.findall(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\"\s\d+\s\d+\s\d+\.\d+\s(\d+\.\d+)',l1)

if l_match:
    for each_find in l_match:
        l_date = each_find[0]
        l_number = float(each_find[1])
        print l_date
        print l_number

出力

2013-01-01 00:00:02
15.84
2013-01-02 00:01:03
15.99
于 2016-05-05T08:44:49.793 に答える
0

コメントで Hugo Honorem が指摘したように、 pandas を使用できます

プロジェクトにこれ以上依存関係を導入したくない場合は、次のような関数を使用できます。

from operator import itemgetter

def load_dataset(fp, columns, types=None, delimiter=' ', skip_header=True):
    get_columns = itemgetter(*columns)
    if skip_header:
        next(fp)
    dataset = []
    for line in fp:
        parts = line.split(delimiter)
        columns = get_columns(parts)
        if types is not None:
            columns = [convertor(col) for convertor, col in zip(types, columns)]
        dataset.append(columns)
    return dataset

columns整数のリストである必要があり、types目的の列を必要な型に変換する呼び出し可能なオブジェクトのリストです。フロートの場合は渡すだけfloatで、日付の場合はカスタムto_date関数を渡すことができます。

于 2016-05-05T08:48:23.373 に答える
0

あなたが持っているのは、区切り文字として空白を含む CSV ファイルであるため、CSV ライブラリ ( https://docs.python.org/2/library/csv.html ) を使用できます。それ以外の場合は、行ごとに読み取り、split() で解析できます。

f = open('myfile.csv','r')
for line in f.readlines():
    date = line.split(' ')[0]
    value = line.split(' ')[N]

N は、値が配置されている列です (この例では 4)。

それにもかかわらず、パンダを強くお勧めします。これにより、コードの品質が次のレベルに引き上げられます。

于 2016-05-05T08:50:32.230 に答える