pandas は異なる列数の CSV ファイルを読み取ります

パンダを使用して各行に異なる列を含む CSV ファイルを読み取る

シーケンスモデルの場合、各データのサイズは必ずしも等しいとは限りませんが、一般的なニューラルネットワークの場合、入力サイズは等しい必要があります。現在の方法の 1 つは、現在のデータ セット内のデータの最大長をベースライン データ サイズとして選択し、残りのデータの末尾にゼロを埋め込んでデータ セット全体の各データのサイズを標準化することです。

この記事では、小規模な CSV データ セットに焦点を当て、パンダを通じて各行に異なる列を含む CSV ファイルを読み取り、最終的にニューラル ネットワークで使用できるデータを生成します。

PS: この記事は本質的に一般的なものにすぎません。特定のデータ セットについては、特定の問題の特定の分析が必要です。

図に示すように:
1

  1. トレーニング ファイルとテスト ファイルを走査して、最大の列データを取得します。largest_colum

    train_path = 'train.csv'
    test_path = 'test.csv'
    largest_colum = 0  # 数据集中最大的列数
    with open(train_path, 'r') as f:  # 遍历train.csv, 获取训练集中的最大列数
        datas = f.readlines()
        for i, l in enumerate(datas):
            largest_colum = largest_colum if largest_colum > len(l.split(',')) + 1 else len(l.split(',')) + 1
    
    with open(test_path, 'r') as f:  # 编列test.csv, 获取测试集中的最大列数
        datas = f.readlines()
        for i, l in enumerate(datas):
            largest_colum = largest_colum if largest_colum > len(l.split(',')) + 1 else len(l.split(',')) + 1
    
  2. 元の csv 列インデックスを破棄し、largest_columcsv ファイルを読み取るためのインデックスとして使用します。

    col_name = [i for i in range(largest_colum)]  # 生成CSV数据每一列的索引
    train_data = pd.read_csv(train_path, header=None, sep=',', names=col_name,  engin='python')
    train_data = pd.read_csv(test_path, header=None, sep=',', names=col_name,  engin='python')
    

    読み取り後のデータは次のとおりです。
    1

  3. 末尾の長さが足りないデータは 0 で埋めます (0 である必要はありません。データセット内の元のデータと区別する必要があります)。

    train_data = train_data.fillna(-1)
    test_data = test_data.fillna(-1)
    
  4. pandas 行列を torch テンソルに変換する

    train_features = torch.tensor(train_data, dtype=torch.float32)
    test_features = torch.tensor(test_data, dtype=torch.float32)
    

おすすめ

転載: blog.csdn.net/qq_44733706/article/details/130202164