объединить один столбец слева и оставшиеся столбцы справа в один фрейм данных с помощью python

#python #pandas #dataframe #memory

#python #pandas #фрейм данных #память

Вопрос:

Я хотел бы объединить один столбец, который я преобразовал в фрейм данных с именем ytrainSet, с остальными столбцами из xtrainSet набора данных. Мой входной файл вызывается InputData.txt и вы можете получить доступ к моему полному вводу по этой ссылке:https://drive.google.com/file/d/1_G61x0N-l70oPJOrNJ9NZ1nEGex06wWQ/view?usp=sharing

 gold,Program,MethodType,CallersT,CallersN,CallersU,CallersCallersT,CallersCallersN,CallersCallersU,CalleesT,CalleesN,CalleesU,CalleesCalleesT,CalleesCalleesN,CalleesCalleesU,CompleteCallersCallees,classGold
T,chess,Inner,Low,-1,-1,Low,-1,-1,High,-1,-1,-1,-1,Low,1,Trace,
N,chess,Inner,-1,Low,-1,-1,Low,-1,-1,High,-1,-1,-1,Low,1,NoTrace,
N,chess,Inner,-1,Low,-1,-1,Low,-1,-1,High,-1,-1,-1,Low,1,NoTrace,
N,chess,Inner,-1,Low,-1,-1,Low,-1,-1,High,-1,-1,-1,Low,1,Trace,
N,chess,Inner,-1,Low,-1,-1,Low,-1,-1,High,-1,-1,-1,Low,1,NoTrace,
N,chess,Inner,-1,Low,-1,-1,Low,-1,-1,High,-1,-1,-1,Low,1,Trace,
N,chess,Inner,-1,Low,-1,-1,Low,-1,-1,High,-1,-1,-1,Low,1,Trace,
N,chess,Inner,-1,Low,-1,-1,Low,-1,-1,High,-1,-1,-1,Low,1,NoTrace,
N,chess,Inner,-1,Low,-1,-1,Low,-1,-1,Medium,Medium,-1,High,High,0,Trace,
N,chess,Inner,-1,Low,-1,-1,Low,-1,-1,Medium,Medium,-1,High,High,0,NoTrace,
N,chess,Inner,-1,Low,-1,-1,Low,-1,-1,Medium,Medium,-1,High,High,0,NoTrace,
  

Мои полные данные доступны по следующей ссылке:

Вот код, который я использую для обработки этих данных:

     import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

SeparateProjectLearning=False


WeakenedCompleteCallersCallees=False
arr = [9, 54, 30, 88, 91, 76, 43, 27, 21, 18]
index=arr[0]
def main():
    X_train={}
    X_test={}
    y_train={}
    y_test={}
    dataset = pd.read_csv( 'InputData.txt', sep= ',', index_col=False) 
    #dataset = pd.read_csv( 'InputData.txt', sep= ',', index_col=False) 

    #convert T into 1 and N into 0
    dataset=dataset.drop(columns=['Program'], axis=1)
    dataset['gold'] = dataset['gold'].astype('category').cat.codes
    #dataset['Program'] = dataset['Program'].astype('category').cat.codes
    dataset['classGold'] = dataset['classGold'].astype('category').cat.codes
    dataset['MethodType'] = dataset['MethodType'].astype('category').cat.codes
    
    dataset['CallersT'] = dataset['CallersT'].astype('category').cat.codes
    dataset['CallersN'] = dataset['CallersN'].astype('category').cat.codes
    dataset['CallersU'] = dataset['CallersU'].astype('category').cat.codes
    dataset['CallersCallersT'] = dataset['CallersCallersT'].astype('category').cat.codes
    dataset['CallersCallersN'] = dataset['CallersCallersN'].astype('category').cat.codes
    dataset['CallersCallersU'] = dataset['CallersCallersU'].astype('category').cat.codes
    dataset['CalleesT'] = dataset['CalleesT'].astype('category').cat.codes
    dataset['CalleesN'] = dataset['CalleesN'].astype('category').cat.codes
    dataset['CalleesU'] = dataset['CalleesU'].astype('category').cat.codes
    dataset['CalleesCalleesT'] = dataset['CalleesCalleesT'].astype('category').cat.codes
    dataset['CalleesCalleesN'] = dataset['CalleesCalleesN'].astype('category').cat.codes
    dataset['CalleesCalleesU'] = dataset['CalleesCalleesU'].astype('category').cat.codes

    
    pd.set_option('display.max_columns', None)


    #print(dataset.head())
    row_count, column_count = dataset.shape
 
   
    X = dataset.iloc[:, 1:column_count].values
    y = dataset.iloc[:, 0].values
        
    print(dataset.head())
    CompleteSet=dataset.loc[dataset['CompleteCallersCallees'] == 1] 
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=len(CompleteSet)/(len(X)*2), random_state=index) 
        
    ytrainSet = pd.DataFrame(np.array(y_train).T)
    xtrainSet = pd.DataFrame(np.array(X_train))
    print('====!!!!!!!n',ytrainSet.head())
    print('====!!!!!!!n',xtrainSet.head())
    #THE LINE WHERE EVERYTHING CRASHES IS RIGHT BELOW:
    remainingSet = pd.merge(ytrainSet, xtrainSet)
      
    print('====n',remainingSet.head())

    
if __name__=="__main__": 
    main() 
  

Все строки программы, заканчивающиеся на .cat.codes , направлены на преобразование строковых значений в числовые значения из 0,1,2 и т.д. Затем моя проблема возникает, когда я пытаюсь объединить столбец ytrainSet со столбцами, образующими xtrainSet. Я пытаюсь объединить следующий столбец

 ====!!!!!!! First column //DATA FRAME 1
    0
0  0
1  0
2  0
3  0
4  0
  

с остальными столбцами, которые я вставляю ниже

  ====!!!!!!! remaining columns //DATA FRAME 2
    0   1   2   3   4   5   6   7   8   9   10  11  12  13  14
0   0   0   0   2   0   3   2   0   0   3   0   0   0   0   0
1   0   0   0   3   0   0   3   0   2   3   0   0   2   0   1
2   1   0   0   0   0   0   0   0   0   0   0   0   0   1   0
3   0   0   2   0   0   3   0   0   0   2   0   0   2   0   0
4   2   0   0   0   0   0   0   0   0   3   0   0   3   0   0
  

Другими словами, я хотел бы, чтобы мой результат remaining Set состоял из первого столбца, расположенного слева, объединенного с 15 столбцами, которые я только что вставил выше. Результирующий фрейм данных должен состоять из 16 столбцов, причем первый столбец DATAFRAME1 является крайним левым столбцом, за которым следуют все lcolumns, содержащиеся в DATAFRAME2.

Моя программа вылетает в строке remainingSet = pd.merge(ytrainSet, xtrainSet) , и я получаю следующую обратную ссылку на ошибку, которую я вставляю ниже:

Обратная трассировка (последний последний вызов):

Файл «», строка 1, в runfile(‘C:/Users/mouna/ownCloud/Mouna Hammoudi/dumps/Python/StackOverflowTest.py ‘, wdir=’C:/Users/mouna/ownCloud/Mouna Хаммуди/дампы/Python’)

Файл «C:UsersmounaAnaconda3libsite-packagesspyder_kernelscustomizespydercustomize.py «, строка 668, в runfile execfile(имя файла, пространство имен)

Файл «C:UsersmounaAnaconda3libsite-packagesspyder_kernelscustomizespydercustomize.py «, строка 108, в execfile exec(compile(f.read(), filename, ‘exec’), пространство имен)

Файл «C:/Users/mouna/ownCloud/Mouna Hammoudi/dumps/Python/StackOverflowTest.py «, строка 64, в main()

Файл «C:/Users/mouna/ownCloud/Mouna Hammoudi/dumps/Python/StackOverflowTest.py «, строка 58, в основном оставшемся наборе = pd.merge(ytrainSet, xtrainSet)

Файл «C:UsersmounaAnaconda3libsite-packagespandascorereshapemerge.py «, строка 62, в операции возврата слиянием.get_result()

Файл «C:UsersmounaAnaconda3libsite-packagespandascorereshapemerge.py «, строка 568, в get_result join_index, left_indexer, right_indexer = self._get_join_info()

Файл «C:UsersmounaAnaconda3libsite-packagespandascorereshapemerge.py «, строка 777, в _get_join_info right_indexer) = self._get_join_indexers()

Файл «C:UsersmounaAnaconda3libsite-packagespandascorereshapemerge.py «, строка 756, в _get_join_indexers как=self.как)

Файл «C:UsersmounaAnaconda3libsite-packagespandascorereshapemerge.py «, строка 1148, в _get_join_indexers возвращает join_func(lkey, rkey, count, **kwargs)

Файл «pandas_libsjoin.pyx», строка 54, в pandas._libs.join.inner_join

Ошибка памяти

Комментарии:

1. Предоставьте воспроизводимые и выборочные данные. Не сбрасывайте сразу все. Здесь сложно что-либо расшифровать.

2. @Mainland Я предоставил воспроизводимый код, просто скопируйте и вставьте код, который я предоставил вам в вашем редакторе Python, и запустите его, и вы получите ту же ошибку, что и я. Я даже предоставил весь входной файл, который я использую, по общедоступной ссылке