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

问题描述 投票:0回答:2

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

有办法吗?我主要是研究openpyxl,因为该模块似乎在excel编辑中使用最多,但是我想我对如何编辑单位感到非常困惑,因此它们都是相同的...我似乎找不到一个支持我正在尝试的模块。

python excel converters
2个回答
0
投票

您可以使用熊猫轻松做到这一点。您可能需要安装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()来检查和更新值。这会将任何函数应用于选项axis = 1的pd.DataFrame的每一行。应用的函数将一行数据作为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
投票

如果文件为“ * .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 /天/秒,我没有得到这种格式,但是如果您有cm3 /天,则可以通过下面的代码将其转换为cm3 /年)

#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工作表中使用有效的列名

© www.soinside.com 2019 - 2024. All rights reserved.