鱼C论坛

 找回密码
 立即注册
查看: 2010|回复: 6

pandas报错

[复制链接]
发表于 2023-5-18 10:11:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False)

    # 自动设置数字格式为数值,保留一位小数
    workbook = writer.book
    worksheet = writer.sheets[sheet_name]
    num_format = workbook.add_format({'num_format': '0.0'})
    for i, width in enumerate(get_col_widths(df[sheet_name])):
        worksheet.set_column(i, i, width, num_format)
为什么ModuleNotFoundError: No module named 'xlsxwriter'????
get_col_widths会出现警告
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-18 10:11:38 | 显示全部楼层
这个问题是因为你的代码中使用了xlsxwriter模块,但是你的环境中没有安装这个模块。你需要使用以下命令来安装它:
pip install xlsxwriter
另外,get_col_widths函数的警告可能是因为你没有定义这个函数,或者没有导入相关的模块。请确保你已经正确定义了这个函数并且导入了所有需要的模块。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-18 10:25:02 | 显示全部楼层
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[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False)

    # 自动设置数字格式为数值,保留一位小数
    workbook = writer.book
    worksheet = writer.sheets[sheet_name]
    num_format = workbook.add_format({'num_format': '0.0'})
    for i, width in enumerate(get_col_widths(df[sheet_name])):
        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[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False)

    # 自动设置数字格式为数值,保留一位小数
    workbook = writer.book
    worksheet = writer.sheets[sheet_name]
    num_format = workbook.add_format({'num_format': '0.0'})
    for i, width in enumerate(get_col_widths(df[sheet_name])):
        worksheet.set_column(i, i, width, num_format)


writer.save()

NameError: name 'get_col_widths' is not defined
请问该如何修改?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-18 12:58:55 | 显示全部楼层
王大可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([len(str(s)) for s in dataframe.index.values] + [len(str(dataframe.index.name))])
    # Then, we concatenate this to the max of the lengths of column name and its values for each column, left to right
    return [idx_max] + [max([len(str(s)) for s in dataframe[col].values] + [len(col)]) for col in dataframe.columns]

你可以在代码的开始部分添加这个函数的定义。

另外,你的代码中似乎在对 DataFrame 进行操作时混淆了使用 sheet_name 的方式。你可能需要在对每个 sheet 进行操作时,确保你是在对应的 DataFrame 上操作。

最后,注意在处理日期时间数据时,如果列的数据类型不是 datetime 类型,你可能需要先进行类型转换。

这是一种可能的解决方式,你可以根据实际需要进行适当的修改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-18 15:52:46 | 显示全部楼层
isdkz 发表于 2023-5-18 12:58
错误 "NameError: name 'get_col_widths' is not defined" 指的是,你的代码中使用了名为  get_col_width ...

定义函数后运行为什么AttributeError: 'XlsxWriter' object has no attribute 'save'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-18 15:55:58 | 显示全部楼层
王大可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' 对象。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-23 13:44:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 06:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表