我收到一个似乎...错误的错误。当然,因为工作表对象具有 set_column() 作为函数,所以它在文档中。我可能做了一些愚蠢的事情,比如去掉括号。
这是错误:
Traceback (most recent call last):
File "scrubaddresses.py", line 137, in <module>
run()
File "scrubaddresses.py", line 118, in run
format_col_width(worksheet)
File "scrubaddresses.py", line 24, in auto_format_cell_width
ws.set_column('B:C', 20)
AttributeError: 'Worksheet' object has no attribute 'set_column'
这是我荒谬的进口。 Config 是一些常量,控制器有一些辅助函数。
from smartystreets_python_sdk import StaticCredentials, exceptions, Batch, ClientBuilder
from smartystreets_python_sdk.us_street import Lookup as StreetLookup
from pathlib import Path
import pandas as pd
import numpy as np
import config
from controller import getExcel, clean
有问题的功能:
def format_col_width(ws):
ws.set_column('B:C', 20)
ws.set_column('D', 1)
ws.set_column('E', 20)
传递的ws来自哪里:
df1 = df.replace(np.nan, '', regex=True)
print(df1)
df1.to_excel(writer, sheet, index = False, engine='xlsxwriter')
worksheet = writer.sheets[sheet]
format_col_width(worksheet)
我是否忘记导入某些东西? Xlsxwriter 已安装。
给出的原因:
AttributeError: 'Worksheet' object has no attribute 'write'
这是因为你的电脑上没有安装xlsxwriter。
您可以使用:
pip install xlsxwriter
它会起作用。
单列范围存在错误。它们应该是
D:D
而不是 D
,因为即使它们相同,该方法也需要开始和结束列。
经过修改,代码应该可以工作:
import pandas as pd
def format_col_width(ws):
ws.set_column('B:C', 20)
ws.set_column('D:D', 1)
ws.set_column('E:E', 20)
df = pd.DataFrame({'Data1': [10, 20, 30, 20, 15, 30, 45]})
writer = pd.ExcelWriter('pandas_test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1')
workbook = writer.book
worksheet = writer.sheets['Sheet1']
format_col_width(worksheet)
writer.save()
尝试上面的代码,看看是否有效。如果没有,则 XlsxWriter 可能未安装,并且 Pandas 默认为 OpenPyXL。
我遇到了同样的问题,以下方法对我有用:
def format_col_width(ws):
ws.column_dimensions['B'].width = 20
ws.column_dimensions['C'].width = 20
ws.column_dimensions['D'].width = 1
ws.column_dimensions['E'].width = 20
# monkey path :) -- https://stackoverflow.com/questions/74844262/how-can-i-solve-error-module-numpy-has-no-attribute-float-in-python
# as of 2023/04/21
# AttributeError: module 'numpy' has no attribute 'float'
np.float = float
writer = pd.ExcelWriter('test.xlsx')
df.to_excel(writer, sheet_name='Sheet1', index=False, na_rep='NaN')
for column in df:
column_length = max(df[column].astype(str).map(len).max(), len(column))
col_idx = df.columns.get_loc(column)
#writer.sheets['Sheet1'].set_column(col_idx, col_idx, column_length) <-- set_column deprecated
writer.sheets['Sheet1'].column_dimensions[chr(65+col_idx)].width = column_length + 5 # add some extra space {5 here} to have a better look