[Pythonデータ処理]Pythonでcsvドキュメントを前処理してデータを抽出する方法


[問題の背景]
次のテキストファイルを処理します.
grade_gbk.csv(GBK符号化フォーマット)
grade_uft-8.csv(UTF-8符号化フォーマット)
各ファイルの内容は同じで、全部で3つのデータで、各データの第1項は名前で、第2項は国語で、第3項は数学で、第4項は英語です
まずExcelを開き、次のように入力します.
名前
国語
数学
英語
張三
128
136
112
李四
99
106
73
王五
102
148
88
次に2回保存し、最初のファイル名は'grade_gbk.csv'、保存タイプは'CSV(カンマ区切り)(*.csv)';2回目のファイル名は'grade_utf-8.csv′は、保存タイプが"CSV UTF-8(カンマ区切り)(*.csv)"である、2つの異なる符号化フォーマットが得られる.csvファイルは、実際のアプリケーションでは両方の符号化に遭遇する可能性があるので、以下のプレゼンテーションでは2つの符号化について説明する.csvファイルの読み取りについて簡単に紹介します.
[問題解析]
はい.csvファイルが存在するディレクトリの下に新しい.pyファイル、注意.pyファイル名は自分で取ることができますが、csvではありません.py、そうでない場合、コードでcsvを呼び出すと、AttributeError:module'csv'has no attribute'excel'に変更されます.(このエラーの解決については、Python csvモジュールの学習でAttributeError:module'csv'has no attribute'writer'と書き込み後にスペースの問題が発生した-ceoicacのブログを参照)
まず、GBK符号化をどのように読み取るかを見る.csvファイル.ここはpandasライブラリが使えます.
(pandasライブラリインストールコマンドcmdでpip install pandas-iを入力https://pypi.tuna.tsinghua.edu.cn/simplepandasライブラリをインストールできます)
pandasライブラリをインポートするには、次の手順に従います.
import pandas as pd

loadData()関数の作成:(データプリプロセッシング関数)(file Pathはファイルパス名)
def loadData(filePath):

pandasライブラリのread_を呼び出すcsv()関数、パラメータはファイルパス名filePath、符号化フォーマット名encoding='gbk'であり、読み込んだファイル情報はcsv変数に返される.
    csv = pd.read_csv(filePath, encoding='gbk')

csvファイルの内容を画面に出力します.
    print(csv)

主関数の記述:
if __name__ == '__main__':
    loadData('grade_gbk.csv')

完全なコードは次のとおりです.
def loadData(filePath):
    csv = pd.read_csv(filePath, encoding='gbk')
    print(csv)
if __name__ == '__main__':
    loadData('grade_gbk.csv')

完了後にプログラムを実行すると、Python Shellは次のように表示されます.
                    
0      128  136  112
1       99  106   73
2      102  148   88

これによりPython表示を使用することができます.csvファイルの内容です.
ただし、[pythonデータ処理]では、Pythonでtxtドキュメントを前処理してデータを抽出する方法について、retNameとretDataを返す手順を示しています.ここではloadData()関数の書き換えについても説明します.
実際にcsvを使用する.valuesはリスト化されたcsvを取得できます.
[['  ' 128 136 112]
 ['  ' 99 106 73]
 ['  ' 102 148 88]]

旧バージョンではas_を使用していましたmatrix()メソッドは同じ機能を果たしますが、実行プロンプトはas_matrix()メソッドは、将来のバージョンで削除されます.メンバー変数valuesで置き換えることをお勧めします.すなわちcsv.valuesはcsvに代わった.as_matrix()
csvについて.valuesのようなリストでは、名前と点数を抽出するのは簡単です.
csvを巡るvaluesの各行:
    for line in csv.values:

各行の最初の列を名前として抽出します.
        retName.append(line[0])

各行の2列目以降をスコアとして抽出する:(line[1:]はnumpy.array形式であり、tolist()でPythonのlistリストに変換する必要がある)
        retData.append(line[1:].tolist())

最後にretNameとretDataを返します.
    return retName, retData

主関数の記述:
if __name__ == '__main__':
    Names, Grades = loadData('grade_gbk.csv')
    print(Names, Grades)

このため、生徒の成績表を処理するGBK符号化形式となる.csvファイルの完全なコードは次のとおりです.
import pandas as pd

def loadData(filePath):
    csv = pd.read_csv(filePath, encoding='gbk')
    retName = []
    retData = []
    for line in csv.values:
        retName.append(line[0])
        retData.append(line[1:].tolist())
    return retName, retData

if __name__ == '__main__':
    Names, Grades = loadData('grade_gbk.csv')
    print(Names, Grades)

UTF-8符号化の処理も簡単です.
import pandas as pd

def loadData(filePath):
    csv = pd.read_csv(filePath, encoding='utf-8')
    retName = []
    retData = []
    for line in csv.values:
        retName.append(line[0])
        retData.append(line[1:].tolist())
    return retName, retData

if __name__ == '__main__':
    Names, Grades = loadData('grade_utf-8.csv')
    print(Names, Grades)

名前とスコアが表示されます.
['  ', '  ', '  '] [[128, 136, 112], [99, 106, 73], [102, 148, 88]]