CSVファイルを pandas DataFrame に読み込むPythonの方法は何ですか(これを統計操作に使用したり、異なるタイプの列を使用したりできます)。
CSVファイル"value.txt"
のコンテンツは次のとおりです。
Date,"price","factor_1","factor_2"
2012-06-11,1600.20,1.255,1.548
2012-06-12,1610.02,1.258,1.554
2012-06-13,1618.07,1.249,1.552
2012-06-14,1624.40,1.253,1.556
2012-06-15,1626.15,1.258,1.552
2012-06-16,1626.15,1.263,1.558
2012-06-17,1626.15,1.264,1.572
Rでは、以下を使用してこのファイルを読み取ります。
price <- read.csv("value.txt")
そして、それはR data.frameを返します:
> price <- read.csv("value.txt")
> price
Date price factor_1 factor_2
1 2012-06-11 1600.20 1.255 1.548
2 2012-06-12 1610.02 1.258 1.554
3 2012-06-13 1618.07 1.249 1.552
4 2012-06-14 1624.40 1.253 1.556
5 2012-06-15 1626.15 1.258 1.552
6 2012-06-16 1626.15 1.263 1.558
7 2012-06-17 1626.15 1.264 1.572
同じ機能を得るためのPythonの方法はありますか?
pandas 救助に:
import pandas as pd
print pd.read_csv('value.txt')
Date price factor_1 factor_2
0 2012-06-11 1600.20 1.255 1.548
1 2012-06-12 1610.02 1.258 1.554
2 2012-06-13 1618.07 1.249 1.552
3 2012-06-14 1624.40 1.253 1.556
4 2012-06-15 1626.15 1.258 1.552
5 2012-06-16 1626.15 1.263 1.558
6 2012-06-17 1626.15 1.264 1.572
これはpandas DataFrame を返します。これはR's
に似ています。
Pythonの組み込みの csv module を使用したpandasライブラリの代替を次に示します。
import csv
from pprint import pprint
with open('foo.csv', 'rb') as f:
reader = csv.reader(f)
headers = reader.next()
column = {h:[] for h in headers}
for row in reader:
for h, v in Zip(headers, row):
column[h].append(v)
pprint(column) # Pretty printer
印刷します
{'Date': ['2012-06-11',
'2012-06-12',
'2012-06-13',
'2012-06-14',
'2012-06-15',
'2012-06-16',
'2012-06-17'],
'factor_1': ['1.255', '1.258', '1.249', '1.253', '1.258', '1.263', '1.264'],
'factor_2': ['1.548', '1.554', '1.552', '1.556', '1.552', '1.558', '1.572'],
'price': ['1600.20',
'1610.02',
'1618.07',
'1624.40',
'1626.15',
'1626.15',
'1626.15']}
CSVファイルをpandas DataFrameとして読み取るには、 pd.read_csv
を使用する必要があります。
しかし、これは物語の終わりではありません。データはさまざまな形式で存在し、さまざまな方法で保存されるため、多くの場合、read_csv
に追加のパラメーターを渡して、データを適切に読み込む必要があります。
CSVファイルで発生する一般的なシナリオと、使用する必要のある適切な引数をリストした表を次に示します。通常、yourデータを読み込むには、以下の引数のすべてまたはいくつかの組み合わせが必要です。
┌──────────────────────────────────────────────────────────┬─────────────────────────────┬────────────────────────────────────────────────────────┐
│ Scenario │ Argument │ Example │
├──────────────────────────────────────────────────────────┼─────────────────────────────┼────────────────────────────────────────────────────────┤
│ Read CSV with different separator¹ │ sep/delimiter │ read_csv(..., sep=';') │
│ Read CSV with tab/whitespace separator │ delim_whitespace │ read_csv(..., delim_whitespace=True) │
│ Fix UnicodeDecodeError while reading² │ encoding │ read_csv(..., encoding='latin-1') │
│ Read CSV without headers³ │ header and names │ read_csv(..., header=False, names=['x', 'y', 'z']) │
│ Specify which column to set as the index⁴ │ index_col │ read_csv(..., index_col=[0]) │
│ Read subset of columns │ usecols │ read_csv(..., usecols=['x', 'y']) │
│ Numeric data is in European format (eg., 1.234,56) │ thousands and decimal │ read_csv(..., thousands='.', decimal=',') │
└──────────────────────────────────────────────────────────┴─────────────────────────────┴────────────────────────────────────────────────────────┘
脚注
デフォルトでは、
read_csv
はCパーサーエンジンを使用してパフォーマンスを向上させます。 Cパーサーは、単一文字の区切り文字のみを処理できます。 CSVに複数文字の区切り文字がある場合、'python'
エンジンを使用するようにコードを変更する必要があります。正規表現を渡すこともできます:df = pd.read_csv(..., sep=r'\s*\|\s*', engine='python')
UnicodeDecodeError
は、データが1つのエンコード形式で保存されていたが、別の互換性のない形式で読み取られた場合に発生します。最も一般的なエンコードスキームは'utf-8'
と'latin-1'
であり、データはこれらのいずれかに適合する可能性があります。
header=False
は、CSVの最初の行がヘッダー行ではなくデータ行であることを指定し、names=[...]
を使用すると、作成時にDataFrameに割り当てる列名のリストを指定できます。「名前なし:0」は、名前のないインデックスを持つDataFrameがCSVに保存され、その後再読み取りされるときに発生します。読み取り中に問題を修正する代わりに、書き込み時に問題を修正することもできます
df.to_csv(..., index=False)
ここで言及しなかった他の議論もありますが、これらは最も頻繁に遭遇するものです。
python標準ライブラリにある csv module を使用して、CSVファイルを操作できます。
例:
import csv
with open('some.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
print row