Python excel 写入的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python excel 写入的问题相关的知识,希望对你有一定的参考价值。

如图,已有excel,名为‘demo1.xlsx'。现在我需要在原有表格的基础上,在指定地方写入另一组数据data,data为list类型,可以为字符串或是数字。请问怎么实现???请附上完整代码,谢谢~~~

(1)对Excel的写操作:

# -*- coding: utf-8 -*-
#导入xlwt模块
import xlwt
# 创建一个Workbook对象,这就相当于创建了一个Excel文件
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
'''
Workbook类初始化时有encoding和style_compression参数
encoding:设置字符编码,一般要这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中文了。
默认是ascii。当然要记得在文件头部添加:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
style_compression:表示是否压缩,不常用。
'''
#创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。
# 在电脑桌面右键新建一个Excel文件,其中就包含sheet1,sheet2,sheet3三张表
sheet = book.add_sheet('test', cell_overwrite_ok=True)
# 其中的test是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False
# 向表test中添加数据
sheet.write(0, 0, 'EnglishName')  # 其中的'0-行, 0-列'指定表中的单元,'EnglishName'是向该单元写入的内容
sheet.write(1, 0, 'Marcovaldo')
txt1 = '中文名字'
sheet.write(0, 1, txt1.decode('utf-8'))  # 此处需要将中文字符串解码成unicode码,否则会报错
txt2 = '马可瓦多'
sheet.write(1, 1, txt2.decode('utf-8'))
 
# 最后,将以上操作保存到指定的Excel文件中
book.save(r'e:\\test1.xls')  # 在字符串前加r,声明为raw字符串,这样就不会处理其中的转义了。否则,可能会报错

追问

以后这种垃圾答案就别写了,浪费大家时间,谢谢

参考技术A #for Python 3
txt1 = '中文名字'
sheet.write(0, 1, txt1.encode('utf-8').decode('utf-8'))  # 此处需要将中文字符串解码成unicode码,否则会报错
txt2 = '马可瓦多'
sheet.write(1, 1, txt2.encode('utf-8').decode('utf-8'))

使用 pandas 在 python 中将值写入 excel

【中文标题】使用 pandas 在 python 中将值写入 excel【英文标题】:Writing values to excel in python using pandas 【发布时间】:2018-10-17 08:32:26 【问题描述】:

我是 python 新手,想将 excel 文件中的 ZipCode 传递给“uszipcode”包,并将该特定邮政编码的状态写入 excel 表中的“OriginalZipcode”列。这样做的原因是,我想将现有状态与原始状态进行比较。我不明白代码中的 for 循环是错误的还是其他错误。目前,我无法将状态写入 excel 中的 OriginalZipcode 列。我写的代码是:

import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import uszipcode as US
from uszipcode import ZipcodeSearchEngine
search = ZipcodeSearchEngine()
df = pd.read_excel("H:\excel\checking for zip and states\checkZipStates.xlsx", sheet_name='Sheet1')
#print(df.values)
for i, row in df.iterrows():
    zipcode = search.by_zipcode(row['ZipCode']) #for searching zipcode
    b = zipcode.State
    df.at['row','OriginalState'] = b
    df.to_excel("H:\\excel\\checking for zip and states\\new.xlsx", sheet_name = "compare", index = False)

excel表格是这样的格式:

| ZipCode   |CurrentState     | OriginalState |
|-----------|-----------------|---------------|
| 59714     | Montana         |               |
| 29620     | South Carolina  |               |
| 54405     | Wisconsin       |               |
|    .      | .               |               |
|    .      | .               |               |

【问题讨论】:

您将在每次循环迭代时保存您的 excel 文件。您可能想保存在循环之外。此外,出于所有意图和目的,您的邮政编码问题与您的问题无关。所以我会简化为只包括,例如,在字典中查找一个键或类似的东西。 @PaulH 由于我在循环中读取邮政编码,我不必每次迭代都将各自的状态写入 excel 文件吗? 我可以通过从 Excel 中读取邮政编码在输出控制台中打印状态。这意味着 for-loop 工作正常。但是,我不确定 df.at['row', 'OriginalState'] = b 是否是在 Excel 中写入单元格的正确方法。任何帮助将非常感激。谢谢! print(df) 在您的循环之外会告诉您这些值是否已正确分配 df.at: df.at[row,'OriginalState'] = b 中不引用row 【参考方案1】:

您可以在不迭代 df 的情况下添加 OriginalState 列:

定义一个函数,返回任何给定邮政编码所需的值:

def get_original_state(state):
    zipcode = search.by_zipcode(state) #for searching zipcode
    return zipcode.State

然后:

df['OriginalState'] = df.apply( lambda row: get_original_state(row['ZipCode']), axis=1)

最后,只导出一次 df 到 excel。

这应该可以解决问题。

【讨论】:

行得通,谢谢!现在,我将不得不深入了解 df.apply() 的用法

以上是关于Python excel 写入的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 在 python 中将值写入 excel

使用 Python 在现有的 excel 文件中修改和写入数据

如何将python数组(data = [])写入excel?

有没有一种使用 Python Openpyxl 在 Excel 中写入数据的简洁方法?

使用 Python 将列表中的数据帧写入多个 excel 文件

在 php(网页)中运行 Python 脚本以写入现有的 excel