如何阅读 Excel 电子表格并转换单位?

How to read an Excel spreadsheet and convert units?

我有一个 excel 电子表格,我想使用 python 将测量值从 cm3/day 转换为仅 cm3/year。

有办法吗? 我主要研究了 openpyxl,因为这个模块似乎最常用于 excel 编辑,但我想我主要对如何编辑单位感到困惑,所以它们都是一样的......我不能似乎找到了支持我正在尝试做的事情的模块。

如果文件是“*.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)

要对列执行计算(cm3/day/sec--this 格式我不明白但是如果你有 cm3/day 你可以通过下面的代码转换它哟 cm3/year)

#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 sheet

中使用有效的列名称

您可以使用 pandas 轻松完成此操作。您可能需要安装 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 的每一行,其中选项轴 = 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')

希望这会有所帮助!