python - заменить некоторые значения в указанном c столбце из CSV, используя критерии (от Кельвина до Цельсия) - PullRequest
0 голосов
/ 30 апреля 2020

В той же колонке у нас есть данные о температуре в Кельвинах и Цельсиях. Как я могу сделать новый столбец, в котором у меня есть тот же тип даты (Кельвин или Цельсий). У меня много данных в формате CSV. Я пытался использовать что-то вроде: если initial_te температура> 50, напишите new_tength = initial_temperame - 273,15, где я предположил, что мы не можем иметь температуру в градусах Цельсия выше 50.

Input_data =[37, 309.15, 38, 310.5]
Output_data = [37, 36, 38, 37.35] 

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Если у вас есть данные в CSV-файле в одном столбце, например:

input_data.csv

37
309.15
38
310.5

Затем вы можете просто прочитать эти данные строка за строкой и сохранить их. в другой файл с дополнительным столбцом.

import csv

with open('input_data.csv') as file:
    reader = csv.reader(file)
    output_file = open('output_data.csv', 'w')
    writer = csv.writer(output_file)
    for row in reader:
        row_values = []
        if float(row[0]) > 50:
            row_values.append(float(row[0]))  # Column A
            row_values.append(round(float(row[0]) - 273.15, 2))  # Column B
            writer.writerow(row_values)
        else:
            row_values.append(float(row[0]))  # Column A
            row_values.append(float(row[0]))  # Column B
            writer.writerow(row_values)
    output_file.close()

Вывод в другом файле:

output_data.csv

37.0,37.0
309.15,36.0
38.0,38.0
310.5,37.35
0 голосов
/ 30 апреля 2020

Если у вас есть только список значений, вы можете использовать понимание списка, чтобы получить результат:

>>> Input_data =[37, 309.15, 38, 310.5]
>>> Output_data = [round((x - 273.15),2) if x > 50 else x for x in Input_data]
>>> Output_data
[37, 36.0, 38, 37.35]

Поскольку вы упомянули столбцы, я полагаю, у вас есть какой-то фрейм данных. Для pandas фрейма данных вы можете использовать лямбда-функцию:

>>> import pandas as pd
>>> df = pd.DataFrame({'Input_data':[37, 309.15, 38, 310.5]})
>>> df
   Input_data
0       37.00
1      309.15
2       38.00
3      310.50
>>> df['Output_data'] = df['Input_data'].apply(lambda x: x - 273.15 if x > 50 else x)
>>> df
   Input_data  Output_data
0       37.00        37.00
1      309.15        36.00
2       38.00        38.00
3      310.50        37.35

Для numpy массивов это выглядит так:

>>> import numpy as np
>>> x = np.array([37, 309.15, 38, 310.5])
>>> x
array([ 37.  , 309.15,  38.  , 310.5 ])
>>>
>>> y = np.where(x > 50, x - 273.15, x)
>>> y
array([37.  , 36.  , 38.  , 37.35])
...