Python 使用Pandas更改整个Excel工作簿中的数据
我有一个很大的excel工作簿。这是我想要的 喜欢使用Python的熊猫。我正在运行python 3.4 在pandas中打开工作簿。 将一个单元格中的值更改为其他值-例如, 更改单元格A2中当前名为Jane Doe的字符串 致鲍勃·史密斯 请记住,我希望选择整个工作簿,而不仅仅是一张工作表。我的目标是进行多次大规模更改。 这是我的密码:Python 使用Pandas更改整个Excel工作簿中的数据,python,pandas,Python,Pandas,我有一个很大的excel工作簿。这是我想要的 喜欢使用Python的熊猫。我正在运行python 3.4 在pandas中打开工作簿。 将一个单元格中的值更改为其他值-例如, 更改单元格A2中当前名为Jane Doe的字符串 致鲍勃·史密斯 请记住,我希望选择整个工作簿,而不仅仅是一张工作表。我的目标是进行多次大规模更改。 这是我的密码: import pandas as pd xls = pd.ExcelFile('Data.xlsx') df = xls.parse('Data') df1
import pandas as pd
xls = pd.ExcelFile('Data.xlsx')
df = xls.parse('Data')
df1 = df.replace('Jane Doe', 'Bob Smith')
根据答案编辑:
艾翰,谢谢你的回复
当我尝试使用您的方法加载数据时,出现以下错误:
fs = pd.read_excel('filename.xlsx', sheetname=None)
AssertionError回溯最近的调用last
在里面
-->1 df=pd.read\u excelData.xlsx
/home/minx/anaconda3/lib/python3.4/site-packages/pandas/io/excel.py in read_excel(io, sheetname, header, skiprows, skip_footer, index_col, names, parse_cols, parse_dates, date_parser, na_values, thousands, convert_float, has_index_names, converters, engine, squeeze, **kwds)
167 """
168 if not isinstance(io, ExcelFile):
--> 169 io = ExcelFile(io, engine=engine)
170
171 return io._parse_excel(
/home/minx/anaconda3/lib/python3.4/site-packages/pandas/io/excel.py in __init__(self, io, **kwds)
216 self.book = xlrd.open_workbook(file_contents=data)
217 else:
--> 218 self.book = xlrd.open_workbook(io)
219 elif engine == 'xlrd' and isinstance(io, xlrd.Book):
220 self.book = io
/home/minx/.local/lib/python3.4/site-packages/xlrd/__init__.py in open_workbook(filename, logfile, verbosity, use_mmap, file_contents, encoding_override, formatting_info, on_demand, ragged_rows)
420 formatting_info=formatting_info,
421 on_demand=on_demand,
--> 422 ragged_rows=ragged_rows,
423 )
424 return bk
/home/minx/.local/lib/python3.4/site-packages/xlrd/xlsx.py in open_workbook_2007_xml(zf, component_names, logfile, verbosity, use_mmap, formatting_info, on_demand, ragged_rows)
792 x12sheet = X12Sheet(sheet, logfile, verbosity)
793 heading = "Sheet %r (sheetx=%d) from %r" % (sheet.name, sheetx, fname)
--> 794 x12sheet.process_stream(zflo, heading)
795 del zflo
796 comments_fname = 'xl/comments%d.xml' % (sheetx + 1)
/home/minx/.local/lib/python3.4/site-packages/xlrd/xlsx.py in own_process_stream(self, stream, heading)
532 elem.clear() # destroy all child elements (cells)
533 elif elem.tag == U_SSML12 + "dimension":
--> 534 self.do_dimension(elem)
535 elif elem.tag == U_SSML12 + "mergeCell":
536 self.do_merge_cell(elem)
/home/minx/.local/lib/python3.4/site-packages/xlrd/xlsx.py in do_dimension(self, elem)
566 # print >> self.logfile, "dimension: ref=%r" % ref
567 last_cell_ref = ref.split(':')[-1] # example: "Z99"
--> 568 rowx, colx = cell_name_to_rowx_colx(last_cell_ref)
569 self.sheet._dimnrows = rowx + 1
570 self.sheet._dimncols = colx + 1
/home/minx/.local/lib/python3.4/site-packages/xlrd/xlsx.py in cell_name_to_rowx_colx(cell_name, letter_value)
89 else: # start of row number; can't be '0'
90 colx = colx - 1
---> 91 assert 0 <= colx < X12_MAX_COLS
92 break
93 except KeyError:
AssertionError:
将所有表格读入字典:
dfs = pd.read_excel('filename.xlsx', sheetname=None)
创建writer对象并在字典上迭代,同时基于键值对进行替换:
repl_dict = {'a': 'b', 'c': 'd', 'e': 'f', 'g': 'h', 'i': 'j'}
writer = pd.ExcelWriter('filename.xlsx')
for sheetname, df in dfs.items():
df = df.replace(repl_dict)
df.to_excel(writer, sheetname, index=False)
writer.save()
您可能需要同时调整和的一些参数,如标题、索引等。取决于您的pandas pd版本。pd.read\u excel的第二个参数可能与接受的答案拼写不同。对于0.21+版本,它是sheet_name,对于旧版本,它是sheet name。那么您尝试了什么,为什么它不起作用?好的,为什么它不起作用?嗯,如果我知道为什么它不起作用,那么我就不会问这个问题。更改是否没有应用到工作表上?变化是否不一致?我们无法读懂你的心思。我们需要详细信息谢谢你,但是这段代码只适用于一组结果。我有数百个单元格要更新。我会这样写代码吗?dfs=pd.read_excel'filename.xlsx',sheetname=None writer=pd.ExcelWriter'filename.xlsx',dfs中的df.items:df=df.replace'a',b'df=df.replace'c',d'df=df.replace'e','f'df=df.replace'g','h'df=df.replace'i','j'df.to_ExcelWriter,sheetname,index=False writer.save我尝试了此方法,但似乎不起作用。我已更新了该案例的答案。从理论上讲,你所做的也应该奏效。它引起了一个错误吗?谢谢,但我希望搜索功能更加具体。因为我想更换的物品的顺序不正确。它是分散的。具体怎么说?这本字典没有任何顺序。我会测试它,让你知道它是如何工作的。谢谢你的帮助。