如何阅读 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')
希望这会有所帮助!
我有一个 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')
希望这会有所帮助!