в Python Pandas, как получить значение преобразования данных динамического ряда / столбца - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь объединить два CSV и преобразовать значения в одном CSV, просматривая постоянные значения в другом CSV. Я могу получить ряд, но не могу получить правильное значение ячейки.Можете ли вы предложить?Я вызываю приведенную ниже функцию при чтении основного csv и преобразовании языкового столбца

dataDF['language'] = 
dataDF['language'].apply(translateLanguagetest)

def translateLanguagetest( keystring):
    print("keystring" + keystring)
    ref_Data_File = Path('C:\sampletest')/ "constant.csv"
    refDataDF = pd.read_csv(ref_Data_File)
    refDataDF['refKey']=refDataDF['sourcedomain']+"#"+refDataDF['value']
    +"#"+refDataDF['targetdomain']
    refDataDF['refValue']=refDataDF['target']
    modRef= refDataDF['refValue'].where(refDataDF['refKey']== 
    'languageSRC#'+keystring+'#languagetarget')
    print("modRef: "+modRef )
    cleanedRef = modRef.dropna()
    f(cleanedRef)
    print(cleanedRef)
    value = cleanedRef.loc[('refValue')]
    return value

Содержимое файла constant.csv имеет значение value, sourcedomain, targetdomain, target ita, languageSRC, languagetarget, it eng, languageSRC,LanguageTarget, еп

1 Ответ

0 голосов
/ 13 декабря 2018

Есть решение, и оно было простым.Будучи новичком в python, потребовалось некоторое время, чтобы найти ответ.Я читаю константы csv перед передачей данных в качестве параметра методу преобразования метода столбца.

     import unittest
     from pathlib import Path
     import pandas as pd
     class AdvancedTestSuite(unittest.TestCase):
          """Advanced test cases."""

         def test_transformation(self):

             data_File = Path('C:\Test_python\stackflow')/ "data.csv" 
             data_mod_File = Path('C:\Test_python\stackflow')/ "data_mod.csv" 
             dataDF = pd.read_csv(data_File)
             ref_Data_File = Path('C:\Test_python\stackflow')/ "constant.csv"
             refDataDF = pd.read_csv(ref_Data_File)

             refDataDF['refKey']=refDataDF['sourcedomain'] \
                 +"#"+refDataDF['value']+"#"+refDataDF['targetdomain']
             refDataDF['refValue']=refDataDF['target']
             dataDF['language'] = dataDF['language'].apply(
                lambda x: translateLanguagetest(x, refDataDF))
             dataDF['gender'] = dataDF['gender'].apply(
                 lambda x: translateGendertest(x, refDataDF))
             dataDF.to_csv(data_mod_File,index=False)
     def translateLanguagetest( keystring, refDataDF):
         print("keystring" + keystring)
         modRef= refDataDF['refValue'].where(refDataDF['refKey']== 
             'languageSRC#'+keystring+'#languagetarget')
         #removes the NaN number. modRef is an numpy.ndarray. 
         cleanedRef = modRef.dropna()  
         #after ckeab up,since only one row is remaining, item to select the value 
         #with one element
         value = cleanedRef.item()
         return value
     def translateGendertest( keystring, refDataDF):
         print("keystring" + keystring)
         modRef= refDataDF['refValue'].where(refDataDF['refKey']== 
             'genderSRC#'+keystring+'#gendertarget')
         #removes the NaN number modRef is an numpy.ndarray. 
         cleanedRef = modRef.dropna()
        #after ckeab up,since only one row is remaining, item to select the value 
        value = cleanedRef.item()
        return value

    if __name__ == '__main__':
        unittest.main()

    The data.csv before transformation
    Id,language,gender
    1,ita,male
    2,eng,female
    The constant.csv
    value,sourcedomain,targetdomain,target
    ita,languageSRC,languagetarget,it
    eng,languageSRC,languagetarget,en
    male,genderSRC,gendertarget,Male
    female,genderSRC,gendertarget,Female
    The csv after transformation:
    Id,language,gender
    1,it,Male
    2,en,Female
...