pandas报错
import pandas as pd# 读取 Excel 文件
file_path = "58730.xls"
df = pd.read_excel(file_path, sheet_name=None, dtype='object')
# 将数据写入新的 Excel 文件中
writer = pd.ExcelWriter('N58730.xlsx', engine='xlsxwriter')
for sheet_name in df.keys():
# 转换文件格式
df.to_excel(writer, sheet_name=sheet_name, index=False)
# 自动设置数字格式为数值,保留一位小数
workbook = writer.book
worksheet = writer.sheets
num_format = workbook.add_format({'num_format': '0.0'})
for i, width in enumerate(get_col_widths(df)):
worksheet.set_column(i, i, width, num_format)
为什么ModuleNotFoundError: No module named 'xlsxwriter'????
get_col_widths会出现警告
这个问题是因为你的代码中使用了xlsxwriter模块,但是你的环境中没有安装这个模块。你需要使用以下命令来安装它:
pip install xlsxwriter
另外,get_col_widths函数的警告可能是因为你没有定义这个函数,或者没有导入相关的模块。请确保你已经正确定义了这个函数并且导入了所有需要的模块。 isdkz 发表于 2023-5-18 10:11
这个问题是因为你的代码中使用了xlsxwriter模块,但是你的环境中没有安装这个模块。你需要使用以下命令来安 ...
import pandas as pd
# 读取 Excel 文件
file_path = "58730.xls"
df = pd.read_excel(file_path, sheet_name=None, dtype='object')
# 将数据写入新的 Excel 文件中
writer = pd.ExcelWriter('N58730.xlsx', engine='xlsxwriter')
for sheet_name in df.keys():
# 转换文件格式
df.to_excel(writer, sheet_name=sheet_name, index=False)
# 自动设置数字格式为数值,保留一位小数
workbook = writer.book
worksheet = writer.sheets
num_format = workbook.add_format({'num_format': '0.0'})
for i, width in enumerate(get_col_widths(df)):
worksheet.set_column(i, i, width, num_format)
writer.save()
# 添加 time 列
df['Sheet1']['time'] = pd.to_datetime(df['Sheet1'][['年', '月', '日']])
df['Sheet1']['time'] = df['Sheet1']['time'].dt.strftime('%Y-%m-%d')
# 删除年月日列
df['Sheet1'] = df['Sheet1'].drop(columns=['年', '月', '日'])
# 提取年月信息,然后按照年月分组,将 D 列数据求和
df['Sheet2'] = df['Sheet1'].groupby(['年', '月'])['D'].sum().reset_index()
# 在 Sheet2 中添加表头和相关指标数据
df['Sheet2'].columns = ['年', '月', '月降水']
df['Sheet2']['time'] = pd.to_datetime(df['Sheet2'][['年', '月']].assign(day=1))
df['Sheet2']['月降水均值'] = df['Sheet2']['月降水'].mean()
df['Sheet2']['月降水中值'] = df['Sheet2']['月降水'].median()
df['Sheet2']['月降水极大值'] = df['Sheet2']['月降水'].max()
df['Sheet2']['月降水极小值'] = df['Sheet2']['月降水'].min()
# 设置时间列格式为 yyyy-(/)mm-(/)dd
df['Sheet2']['time'] = df['Sheet2']['time'].dt.strftime('%Y-%m-%d')
# 重新排列 Sheet2 中的列的顺序
df['Sheet2'] = df['Sheet2'][['time', '月降水', '月降水均值', '月降水中值', '月降水极大值', '月降水极小值']]
# 将新的 Excel 文件保存
new_file_path = '新文件路径/N' + file_path.split('/')[-1].replace('.xls', '') + '.xlsx'
writer = pd.ExcelWriter(new_file_path, engine='xlsxwriter')
for sheet_name in df.keys():
df.to_excel(writer, sheet_name=sheet_name, index=False)
# 自动设置数字格式为数值,保留一位小数
workbook = writer.book
worksheet = writer.sheets
num_format = workbook.add_format({'num_format': '0.0'})
for i, width in enumerate(get_col_widths(df)):
worksheet.set_column(i, i, width, num_format)
writer.save()
NameError: name 'get_col_widths' is not defined
请问该如何修改? 王大可2000 发表于 2023-5-18 10:25
import pandas as pd
# 读取 Excel 文件
错误 "NameError: name 'get_col_widths' is not defined" 指的是,你的代码中使用了名为get_col_widths的函数,但是在当前作用域中找不到这个函数的定义。你需要定义这个函数或者从合适的模块中导入它。
这个函数看起来像是用来获取每个列宽度的。一个可能的实现如下:
def get_col_widths(dataframe):
# First we find the maximum length of index column
idx_max = max( + )
# Then, we concatenate this to the max of the lengths of column name and its values for each column, left to right
return + .values] + ) for col in dataframe.columns]
你可以在代码的开始部分添加这个函数的定义。
另外,你的代码中似乎在对 DataFrame 进行操作时混淆了使用 sheet_name 的方式。你可能需要在对每个 sheet 进行操作时,确保你是在对应的 DataFrame 上操作。
最后,注意在处理日期时间数据时,如果列的数据类型不是 datetime 类型,你可能需要先进行类型转换。
这是一种可能的解决方式,你可以根据实际需要进行适当的修改。 isdkz 发表于 2023-5-18 12:58
错误 "NameError: name 'get_col_widths' is not defined" 指的是,你的代码中使用了名为get_col_width ...
定义函数后运行为什么AttributeError: 'XlsxWriter' object has no attribute 'save' 王大可2000 发表于 2023-5-18 15:52
定义函数后运行为什么AttributeError: 'XlsxWriter' object has no attribute 'save'
错误 "AttributeError: 'XlsxWriter' object has no attribute 'save'" 是因为你试图在 'XlsxWriter' 对象上调用一个不存在的方法 'save'。但是 'save' 方法是存在于 'ExcelWriter' 对象中的,而不是 'XlsxWriter' 对象。
你在创建 Excel 文件时,已经正确地使用了 'ExcelWriter' 对象和它的 'save' 方法。以下是你的代码中的相关部分:
writer = pd.ExcelWriter(new_file_path, engine='xlsxwriter')
# ...
writer.save()
所以,你应该确保 'writer' 对象在调用 'save' 方法时仍然是 'ExcelWriter' 对象,并且没有被重新赋值为 'XlsxWriter' 对象。检查一下在调用 'save' 方法之间是否有任何可能修改 'writer' 的代码,并确保这些代码不会将 'writer' 改变为 'XlsxWriter' 对象。 {:7_118:}{:7_141:}{:7_117:}
页:
[1]