我有一个Excel电子表格,我想使用python将测量值从cm3 /天转换为仅cm3 /年。
有办法吗?我主要是研究openpyxl,因为该模块似乎在excel编辑中使用最多,但是我想我对如何编辑单位感到非常困惑,因此它们都是相同的...我似乎找不到一个支持我正在尝试的模块。
您可以使用熊猫轻松做到这一点。您可能需要安装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')
希望这会有所帮助!
如果文件为“ * .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工作表中使用有效的列名