パンダを使用して各行に異なる列を含む CSV ファイルを読み取る
シーケンスモデルの場合、各データのサイズは必ずしも等しいとは限りませんが、一般的なニューラルネットワークの場合、入力サイズは等しい必要があります。現在の方法の 1 つは、現在のデータ セット内のデータの最大長をベースライン データ サイズとして選択し、残りのデータの末尾にゼロを埋め込んでデータ セット全体の各データのサイズを標準化することです。
この記事では、小規模な CSV データ セットに焦点を当て、パンダを通じて各行に異なる列を含む CSV ファイルを読み取り、最終的にニューラル ネットワークで使用できるデータを生成します。
PS: この記事は本質的に一般的なものにすぎません。特定のデータ セットについては、特定の問題の特定の分析が必要です。!
図に示すように:
-
トレーニング ファイルとテスト ファイルを走査して、最大の列データを取得します。
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
-
元の csv 列インデックスを破棄し、
largest_colum
csv ファイルを読み取るためのインデックスとして使用します。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')
読み取り後のデータは次のとおりです。
-
末尾の長さが足りないデータは 0 で埋めます (0 である必要はありません。データセット内の元のデータと区別する必要があります)。
train_data = train_data.fillna(-1) test_data = test_data.fillna(-1)
-
pandas 行列を torch テンソルに変換する
train_features = torch.tensor(train_data, dtype=torch.float32) test_features = torch.tensor(test_data, dtype=torch.float32)