2

A、B、C、D 列と N 行の CSV ファイルがあります。問題は、これらの列のデータが同じ長さではないことです。つまり、一部は 4.5 で、一部は 4.52 です。

私の質問は2つの部分に分かれています:

csv ファイルからこれらの列にアクセスするにはどうすればよいですか。このコードを使用して、csv ファイルの内容を出力し、それらを配列に読み込みました

    import csv
    with open('file.csv','rb') as f:
        reader = csv.reader(f)
        for row in reader:
            print row

CSVファイルの行を印刷し、置き換えました

    print row 

    z = row
    z.append(z)

データを配列に保存します。

ただし、z は 1 次元配列です。データは文字列型です。タイプ np.median(z) の操作を実行しようとすると、エラーが発生します。また、私はできません

    z.append(float(z))

これは私に TypeError を与えています。

そして、値を切り捨てて、csv ファイルからインポートしている間に特定の精度に設定する方法はありますか?! たとえば、ファイルに 4.3、4.56、4.299 などの値が含まれている場合、最終的にインポートするものを小数点 1 桁に制限したいと考えています。

この SE の質問は、私の 2 番目の質問 - Python - CSV: Large file with rows of different length - への回答に最も近いものですが、理解できません。これに関して私を助けてくれる人がいれば、私は感謝します。

EDIT 1: @ Richie: これがサンプル データ セットです - http://goo.gl/io8Az。Googleドキュメントにリンクしています。そして、あなたのコメントを再確認してください。これは、私のcsvファイルであなたのコードを実行した結果です-

     ValueError: could not convert string to float: plate

@ Pieters : z = 行、z.append(z) はこれを作成しました - ['3836', '55302', '402', '22.945717', '22.771544', '23.081865', '22.428421', '21.78294', ' 164.40663689'、'-1.25641627'、'1.780485'、'1237674648848106129'、[...]]]。

私はPythonを使い始めたばかりで、知る必要があることを学んでいることを言及する必要がありました! 私はウェブ上で見つけたコードの断片を即興で作っています。

編集 2: パンダについて聞いたことがあります。使い始めるべきだと思います。

@ Khalid - コードを実行したところ、必要な列を取得できました。行全体を印刷する代わりに、代わりにアクセスできますか?! 静的配列として?!

EDIT 3: @ richie: あなたのコードを初めて実行したとき、これが表示されました -

トレースバック (最新の呼び出しが最後): ファイル ""、4 行目、ValueError: 文字列を float に変換できませんでした: プレート

さて、列名を含む最初の行が原因であることに気付いたので、最初の行を削除し、これを新しいファイルとして保存し、そのファイルでコードを実行したところ、完全に正常に機能しました。

ただし、列識別子を含む最初の行を削除すると、以下の khalid で言及されている方法を使用できません。その間、私はパンダを見ています。

みんなありがとう:)

EDIT 4:教訓。パンダは素晴らしいです。ジョブ完了:) ...

4

2 に答える 2

2

これを試して;

import csv
import numpy as np
class onefloat(float):
   def __repr__(self):
       return "%0.1f" % self
with open('file.csv','rb') as f:
    reader = csv.reader(f)
    for row in reader:
        print map(onefloat,row) # your issue of 1 decimal point is taken care of here
        print '{:.1f}'.format(np.median(map(float,row))) # in case you want this too to be of 1 decimal point

そして、これはPandasを使用して行われる方法です

import pandas as pd
data = pd.read_csv('richards_quasar_outliers.csv')
print data['plate'].median()
于 2013-06-19T09:10:07.010 に答える