CSV (.csv)

予備知識

    • MIME type: text/comma-separated-values, text/csv
    • CSV表データ書式.
    • 数値およびテキスト情報を,コンマでフィールドが区切られた行として保管する.
    • 一般にスプレッドシートアプリケーションにおいてデータ交換形式として使われる.
    • CSVはComma-Separated Valuesの頭字語である.
    • テキスト形式.
    • TSVに似ている.
    • RFC 4180をサポートしている.

ImportとExport

  • Import["file.csv"] はファイルに保管された行と列を表す,文字列や数値の二次元配列を返す.
  • Import["file.csv",elem]は指定の要素をインポートする.
  • Import["file.csv",{elem,subelem1,}] は子要素 subelemiをインポートし,部分的なデータインポートに役立つ.
  • インポート形式は,Import["file","CSV"] または Import["file",{"CSV",elem,}]で指定できる.
  • Export["file.csv",expr] exprからCSVファイルを作成する.
  • サポートされている式 expr
  • {v1,v2,}1列のデータ
    {{v11,v12,},{v21,v22,},}データの行のリスト
    arraySparseArrayQuantityArray等の配列
    tseriesTimeSeriesEventSeriesTemporalDataオブジェクト
    Dataset[]データ集合
    Tabular[]表形式オブジェクト
  • 一般的な情報は,以下の関数ページを参照のこと.
  • Import, Exportファイルからインポートする,あるいはファイルへエキスポートする
    CloudImport, CloudExportクラウドオブジェクトからインポートする,あるいはクラウドオブジェクトへエキスポートする
    ImportString, ExportString文字列からインポートする,あるいは文字列へエキスポートする
    ImportByteArray, ExportByteArrayバイト配列からインポートする,あるいはバイト配列へエキスポートする

Import要素

  • 一般的なImport要素:
  • "Elements" ファイル中の有効な要素とオプションのリスト
    "Summary"ファイルの概要
    "Rules"すべての可能な要素の規則のリスト
  • データ表現要素:
  • "Data"二次元配列
    "Grid"Gridオブジェクトで表された表データ
    "RawData"文字列の二次元配列
    "Dataset"Datasetで表された表データ
    "Tabular"Tabularオブジェクトで表された表データ
  • データ記述要素:
  • "ColumnLabels"列の名前
    "ColumnTypes"列の名前と型の連想
    "Schema"TabularSchemaオブジェクト
  • ImportExportはデフォルトで"Data"要素を使用する.
  • 任意の要素 elem のデータの部分的なインポートにおいて,部分要素は{elem,rows,cols}という形式で行と列の指定をすることができる.rowscolsは以下のいずれでもよい:
  • nn 番目の行または列
    -n最後から数える
    n;;mn から m まで
    n;;m;;sn から m までステップ s
    {n1,n2,}特定の行または列 ni
  • メタデータ要素:
  • "ColumnCount"列数
    "Dimensions"行数と最大列数のリスト
    "RowCount"行数

オプション

  • ImportExportのオプション:
  • "EmptyField"""空のフィールドの表現方法
    "QuotingCharacter""\""数値でないフィールドの区切りに使われる文字
  • コンマと行区切りを含むデータフィールドは通常ダブルクォートでラップされる.デフォルトではExportは区切り文字としてダブルクォートを使用する."QuotingCharacter"を使うと別の文字が指定できる.
  • テキストフィールドを区切るダブルクォート文字はデフォルトではインポートされない.
  • Importオプション:
  • CharacterEncoding"UTF8ISOLatin1"ファイルで使用される生の文字コード
    "ColumnTypeDetectionDepth"Automatic見出し検出に使用される行数
    "CurrencyTokens"None数値をインポートするときに省略される通貨単位
    "DateStringFormat"None DateStringとして指定された日付形式
    "FieldSeparator"","列を分けるために取る文字列トークン
    "FillRows"Automatic行を列の最大長まで埋めるかどうか
    "HeaderLines"Automatic見出しであると仮定する行の数
    "IgnoreEmptyLines"False空白行を省くかどうか
    MissingValuePatternAutomatic欠損している要素を指定するために使用するパターン
    "NumberPoint""."小数点に使用する文字
    "Numeric"Automaticデータフィールドを数値としてインポートするかどうか(可能な場合)
    "Schema"AutomaticTabular オブジェクトを構築するために使用するスキーマ
    "SkipInvalidLines"False無効な行を省くかどうか
    "SkipLines"Automaticファイルの最初の省く行数
  • デフォルトでは,Importはデータが"UTF8"でエンコードされたテキストであるとして解釈を試みる.ファイルに保存されたバイト列で"UTF8"で表せないものがある場合は,Importは代りに"ISOLatin1"を使用する.
  • CharacterEncoding -> Automaticとすると,Importはファイルの文字コードの推測を試みる.
  • "HeaderLines""SkipLines"は以下の設定が可能である:
  • Automatic省略または見出しとして使用する行数を自動的に決めようとする
    n省略またはDataset見出しとして使用する n
    {rows,cols}省略または見出しとして使用する行と列
  • Import"DateStringFormat"の指定に従ってフォーマットされた表の項目をDateObjectに変換する.
  • Exportオプション:
  • AlignmentNone表の列にデータがどのように並んでいるか
    CharacterEncoding"UTF8"ファイルで使用される生の文字コード
    "FillRows"False行を列の最大長まで埋めるかどうか
    "IncludeQuotingCharacter"Automaticエキスポートした値の周囲に引用符を追加するかどうか
    "TableHeadings"Automatic表の行と列の見出し
  • Alignmentが取り得る設定はNoneLeftCenterRightである.
  • "IncludeQuotingCharacter" には以下の値を設定できる:
  • None値を引用符で囲まない
    Automatic必要な場合にのみ値を引用符で囲む
    All有効な値はすべて引用符で囲む
  • "TableHeadings" は以下の値を取ることができる:
  • None列ラベルを省略する
    Automatic列ラベルをエキスポートする
    {"col1","col2",}列ラベルのリスト
    {rhead,chead}行と列に別々のラベルを指定する
  • Exportは,Wolframシステムが実行されているコンピュータシステムに従って行区切り文字をエンコードする.

例題

すべて開くすべて閉じる

  (3)

CSVファイルをインポートする:

ファイルからすべてのデータを読み取り,プロットする:

CSVファイルの概要をインポートする:

式の配列をCSVにエキスポートする:

スコープ  (8)

Import  (4)

CSVファイルからメタデータをインポートする:

自動で見出しを検出するTabularオブジェクトとしてCSVファイルをインポートする:

最初の一行を飛ばしているので,見出しなしでインポートする:

CSVのサンプル行をインポートする:

列ラベルとその型を見て,ファイルの一列を分析する.

一つの列のすべての値を取得する:

その平均を計算する:

Export  (4)

Tabularオブジェクトをエキスポートする:

"TableHeadings"オプションを使って, Tabularオブジェクトから見出しを削除する:

TimeSeriesをエキスポートする:

EventSeriesをエキスポートする:

QuantityArrayをエキスポートする:

Import要素  (27)

"ColumnCount"  (1)

CSVファイルから列数を取得する:

"ColumnLabels"  (1)

CSVファイルから推測される列のラベルを取得する:

"ColumnTypes"  (1)

CSVファイルから推測される列の型を取得する:

"Data"  (6)

CSVファイルを値の二次元リストとしてインポートする:

これはデフォルト要素でもある:

CSVファイルから一行をインポートする:

CSVファイルから特定の行をインポートする:

CSVファイルの最初の10行をインポートする:

CSVファイルの一つの行と列をインポートする:

CSVファイルから一列をインポートする:

"Dataset"  (2)

CSVファイルをDatasetとしてインポートする:

"HeaderLines""SkipLines"オプションを使って興味のあるデータだけをインポートする:

"Dimensions"  (2)

CSVファイルから次元を取得する:

ファイル内のすべての行が同じ列数ではない場合,いくつかの行は無効であると考えられる:

"Grid"  (1)

CSVデータをGridとしてインポートする:

"RawData"  (3)

CSVデータを生の文字列としてインポートする:

"Data"と比較する:

"RawData"に対してはデフォルトでは"Numeric"->Falseが使用される:

"Numeric"->Trueを使用する:

"RawData"に対してはデフォルトでは"FillRows"->Trueが使用される:

"FillRows"->Falseを使用する:

"RowCount"  (1)

CSVファイルから行数を取得する:

"Schema"  (1)

TabularSchemaオブジェクトを取得する:

"Summary"  (1)

CSVファイルの概要:

"Tabular"  (7)

TabularオブジェクトとしてCSVファイルをインポートする:

"HeaderLines"と"SkipLines"のオプションを使って,興味のあるデータのみをインポートする:

一つの行をインポートする:

複数行をインポートする:

最初の5行をインポートする:

指定された行と列の要素をインポートする:

一つの列をインポートする:

Importオプション  (15)

CharacterEncoding  (1)

文字エンコードは$CharacterEncodingsの任意の値に設定できる:

"ColumnTypeDetectionDepth"  (1)

デフォルトでは,列の型の検出にはファイルの先頭から数十行だけが使用される:

より多くの行を使って列の型を検出する:

"CurrencyTokens"  (1)

通貨トークンは自動的には省かれない:

"CurrencyTokens"オプションを使って選択された通過トークンを省略する:

"DateStringFormat"  (1)

指定された日付形式で日付をDateObject指定に変換する:

デフォルトでは変換は行われない:

"EmptyField"  (1)

CSVデータの空のフィールドのデフォルト値を指定する:

"FieldSeparator"  (1)

デフォルトでは,フィールドのセパレータとして"," が使用される:

フィールドのセパレータとしてタブを使用する:

"FillRows"  (1)

"Data"要素については,行の長さは自動的に維持される:

行を充填する:

"RawData"要素については,デフォルトで配列全体がインポートされる:

"HeaderLines"  (1)

デフォルトでは,見出し行は自動的に検出される:

自動見出し検出が正しくない場合は,"HeaderLines" オプションを使う:

行の見出しを指定する:

行と列の見出しを指定する:

"IgnoreEmptyLines"  (1)

"IgnoreEmptyLines"を使ってインポートされたデータからデータの入っていない行を削除する:

MissingValuePattern  (1)

デフォルトでは,自動設定された値は欠落していると見なされる:

欠損要素の検出を無効にするにはMissingValuePatternNone を使う:

文字列パターンを使って欠損している要素を見付ける:

"Numeric"  (1)

数を解釈するために"Numeric"->Trueを使用する:

デフォルトではすべてが文字列としてインポートされる:

"NumberPoint"  (1)

デフォルトでは,浮動小数点データの小数点の文字の指定には"."が使用される:

"NumberPoint"オプションを使って,浮動小数点データの小数点の文字を指定する:

"QuotingCharacter"  (1)

デフォルトの引用符は二重引用符である:

別の引用文字を指定することもできる:

"Schema"  (1)

Import では,CSVファイルに保存されているデータから列のラベルと型が自動的に推測される:

"Schema"オプションを使用して,行のラベルと型を指定する:

"SkipLines"  (1)

CSVファイルはコメント行を含んでいることがある:

コメント行を省く:

コメント行を省き,次の行を Tabularの見出しとして使用する:

Exportオプション  (7)

Alignment  (1)

デフォルトでは位置揃えのために文字は加えられない:

左揃え列の値:

中央揃えの値:

CharacterEncoding  (1)

文字エンコードは$CharacterEncodingsの任意の値に設定できる:

"EmptyField"  (1)

デフォルトでは空の要素は空の文字列としてエキスポートされる:

空の要素に別の値を指定する:

"FillRows"  (1)

デフォルトでは,行の数は保持される:

"FillRows"->True を使って完全な配列をエキスポートする:

"IncludeQuotingCharacter"  (1)

デフォルトでは,Export は引用符を必要とする値の引用符のみをエキスポートする:

"IncludeQuotingCharacter"All を使うと,すべての値を引用符で囲む:

"IncludeQuotingCharacter"Noneを使うと,すべての値を引用符なしでエキスポートする.ただし,見出しには常に引用符が付いていることに注意:

"QuotingCharacter"  (1)

数値ではない要素のデフォルトの引用符は二重引用符である:

異なる引用符を指定する:

"QuotingCharacter"->"" を使うと,すべての値を引用符なしでエキスポートする.ただし,見出しには常に引用符が付いていることに注意:

"TableHeadings"  (1)

デフォルトでは,行の見出しはエキスポートされる:

"TableHeadings"Noneを使うと,行の見出しを省略できる:

列のカスタム見出しを使ってデータをエキスポートする:

列と行のカスタム見出しを使ってデータをエキスポートする:

アプリケーション  (1)

ヨーロッパの国々とその人口のリストをCSVファイルにエキスポートする:

データをインポートし戻し,式に変換する:

考えられる問題  (13)

ファイル内のすべての行が列数と同じ出ない場合,いくつかの行は無効であると考えられる:

"nnnEnnn" の形式の項目は科学表記の数として解釈される:

"Numeric"オプションを使って解釈をオーバーライドする:

数値の解釈により精度が失われる可能性がある:

"Numeric"オプションを使ってこの解釈を上書きする:

バージョン14.2以降では,通貨トークンは自動的に省略されない:

"CurrencyTokens"オプションを使って,通貨トークンを省略する:

バージョン14.2以降では,整数値の列がDeveloper`$MaxMachineIntegerより大きい数の場合は,引用符が追加される:

"IncludeQuotingCharacter"->Noneを使って以前のバージョンと同じ結果を得ることができる:

バージョン14.2以降ではいくつかの文字列は自動的に欠落しているものと見なされる:

MissingValuePatternNone を使うと,この動作を無視できる:

バージョン14.2以降では,小数部が0の実数は整数としてエクスポートされる:

"Backend"->"Table"を使って,以前のバージョンと同じ結果を得ることができる:

バージョン14.2からは,列タイプの自動識別がある:

列内の型が異なる種類であることが予想される場合は,"Backend""Table"を使う:

バージョン14.2以降では,Developer`$MaxMachineIntegerより大きい整数は実数としてインポートされる:

"Backend"->"Table"を使って,以前のバージョンと同じ結果を得ることができる:

バージョン14.2以降では,Tabularオブジェクトの日付と時刻の列はDateStringを使ってエキスポートされる:

"Backend"->"Table"を使って, 以前のバージョンと同じ結果を得ることができる:

Wolfram言語の古いバージョンから生成されたCSVデータの一部は正しく区切られていない可能性があり,バージョン11.2以降では期待通りにインポートされない:

"QuotingCharacter"""を使うと,期待通りの結果が得られる:

データの左上の角は,行と列の見出しを含むDatasetをインポートする際に失われる:

データの次元によってDatasetが異なる形となることもある: