Panda read_csv()は、最初の行のデータを列名に変換します。

序文

たとえば、このcsvの最初の行は、想像したとおりの列名ではない場合があります。そうすれば、データを処理するときに問題が発生します。最初の問題は一貫性がありません。


解決策1

csvライブラリーを呼び出し、プログラムを書き直して、自分でファイルを読み取ります。

csvライブラリは、Pythonに付属するライブラリです。

データがすべて文字タイプの場合

このような状況では、問題は非常に単純です。csv.reader()の反復子を呼び出してそれを読み取ります。

文字列に加えてデータに数字がある場合

以下に解決策を示します。

def float_test(data: str):
    try:
        return float(data)
    except Exception:
        return data


def read(filename):
    """
    :param filename:
    :return:
    """
    values = []
    with open(filename) as f:
        r = csv.reader(f)
        for row in r:
            values.append(list(map(float_test, row)))
    *data, label = list(map(list, zip(*values)))
    return list(zip(*data)), label

これには、私が機械学習アルゴリズム[パーセプトロンアルゴリズムPLA]について書いた以前の記事が含まれます[5分で読む]
上記のコードでは、パーセプトロンをトレーニングするためのモデルを読み取る必要がありますが、データが見つかりました列名がなく、データを変更したくないので、最初にカプセル化する必要があります。
このデータでは、要素である可能性がある最後の列を除いて、残りは浮動小数点数です。そこで、ここでfloat_test関数を呼び出してテストを行いました。

最後の2行、そして戻りで何が起こっているのですか?実際、最後の列を分離し、他の列を2次元の行列に復元したいのですが、各行はテストXです。


解決策2

パラメータの設定!

pandasが提供するread_csvのAPIの説明を参照しくださいhttps : //pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html

言及された文があります:

  • header  :intまたはintのリスト、デフォルトは 'infer'

    • 列名として使用する行番号、およびデータの開始。デフォルトの動作は列名を推測することです。名前が渡されない場合の動作はheader = 0と同じで、列名はファイルの最初の行から推測されます。列名が明示的に渡される場合、動作はheader = Noneと同じです。 。既存の名前を置き換えることができるように、明示的にheader = 0を渡します。ヘッダーは、列のマルチインデックスの行位置を指定する整数のリストにすることができます(例:[0,1,3])。指定されていない間にある行はスキップされます(たとえば、この例では2行がスキップされます)。skip_blank_lines = Trueの場合、このパラメーターはコメント行と空行を無視するため、header = 0はファイルの最初の行ではなくデータの最初の行を示します。
  • 名前  :配列のような、デフォルトなし

    • 使用する列名のリスト。ファイルにヘッダー行が含まれていない場合は、header = Noneを明示的に渡す必要があります。このリストに重複があると、UserWarningが発行されます。

名前パラメーターに関して、ファイルがヘッダーをカバーしていない場合、ヘッダーパラメーターでそれを明確に示す必要があります!

これは正しい解釈なので、正しい操作は次のとおりです(1.csv**ファイルを例として**)。

import pandas as pd

df = pd.read_csv('1.csv', header=None, names=['test'])

次に、列名のないこの列がテスト列として設定されます

おすすめ

転載: blog.csdn.net/u013066730/article/details/108573187