Как читать электронную таблицу Excel и конвертировать единицы? - PullRequest
0 голосов
/ 26 октября 2019

У меня есть таблица Excel, в которой я хотел бы использовать python для преобразования измерений из см3 / день в просто см3 / год.

Есть ли способ сделать это? Я в основном изучал openpyxl, так как этот модуль, кажется, больше всего подходит для редактирования в Excel, но я думаю, что я в основном не понимаю, как редактировать модули, чтобы они все были одинаковыми ... Кажется, я не могу найтимодуль, который поддерживает то, что я пытаюсь сделать.

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Вы можете сделать это легко с пандами. Вам может потребоваться установить xlrd: pip3 install pandas xlrd
или просто сохранить файл как csv.

import pandas as pd
# Read the file with read_csv() or read_excel()
df = pd.read_excel('your_file.xlsx', index_col=0)  # Your index is the first column
>>> df
         measure  amount
precip                  
1        cm3/day      45
2        cm3/day     132
3       cm3/year    9565
4        cm3/sec       5
5        cm3/day      67
6        cm3/day      52
7        cm3/sec       2
8        cm3/day      78
9        cm3/sec       3
10       cm3/day      92

Затем вы можете использовать apply () для проверки и обновления значений по своему усмотрению. Это будет применять любую функцию к каждой строке pd.DataFrame с опцией axis = 1. Примененная функция получает строку ваших данных в виде объекта pd.Series.
Давайте определим функцию:

def _update(serie):
    val = serie['amount']  # The original value
    volume, time = serie['measure'].split('/') # The time unit
    # Check and update
    if time == 'year':
        return serie
    elif time == 'day':
        serie['amount'] = val * 365
    elif time == 'hour':
        serie['amount'] = val * 24 * 365
    elif time == 'sec':
        serie['amount'] = val * 3600 * 24 * 365
    # Update measure col
    serie['measure'] = 'cm3/year'

    return serie

Затем применим функцию:

new_df = df.apply(_update, axis=1)
>>> new_df
         measure     amount
precip                     
1       cm3/year      16425
2       cm3/year      48180
3       cm3/year       9565
4       cm3/year  157680000
5       cm3/year      24455
6       cm3/year      18980
7       cm3/year   63072000
8       cm3/year      28470
9       cm3/year   94608000
10      cm3/year      33580

# Save de new file:
new_df.to_excel('new_file.xlsx')

Надеюсь, это поможет!

0 голосов
/ 26 октября 2019

Если файл в формате "* .xlsx", вы можете прочитать файл в python следующим образом:

#first import necessary packages
import pandas as pd
import numpy as np

data = pd.read_excel(file_name)

Если в формате "* .csv", сделайте это:

#first import necessary packages
import pandas as pd
import numpy as np

data = pd.read_csv(file_name)

Чтобы выполнить вычисление для столбца (см3 / день / сек - этот формат я не получаю, но если у вас есть см3 / день, вы можете преобразовать его в год см3 / год по приведенному ниже коду)

#first check the type of your column
data["column"].dtype

#based on what you get as type

#If your column's data type is string
#convert it to integer
data["column_name"] = data["column_name"].astype(int)
#convert it to float
data["column_name"] = data["column_name"].astype(float)


# if your column is already of numeric type don't change it

#to convert cm3/day to cm3/year
data["column_name"] = data["column_name"]*365

PS: я не вижу связанное изображение, поэтому не могу использовать действительные имена столбцов в таблице Excel

...