python - 使用pd.read_excel读取多页xlsx时如何将列值转换为str?
问题描述
我有一个多页xlsx
文件,我想处理选定的页面,最后将它们保存为CSV
.
这是来自一页的一些原始数据的快照:
我使用此代码加载所有页面并逐个处理每个页面:
def load_raw_excel_file(file_full_name):
df = pd.read_excel(file_full_name, sheet_name=None, engine="openpyxl", header=0)
sheets_name = list(df.keys())
return df, sheets_name
代码的输出(来自同一页面)如下所示:
dfs, shs = load_raw_excel_file("myexelfile.xlsx")
dfs['myselectedsheetname']
如您所见,该Contract
列中的某些值已更改为最新,但我不想要任何更改。我试过使用convertors
and dtype
in pd.read_excel
,但没有用:
df = pd.read_excel(file_full_name, sheet_name=None, engine="openpyxl", header=0, dtype=str)
或者
df = pd.read_excel("myexelfile.xlsx", sheet_name='selectedsheetname', header=0, converters={'Contract':str})
任何想法?
更新
我找到了一种解决方法,但不是一个好的解决方案:
def convert_str_date(x):
try:
y = x.strftime("%b-%y")
return y
except:
return x
df.Contract.apply(lambda x : convert_str_date(x))
另外,请参阅@Simon 回答
解决方案
excel将这些值设置为日期时间格式。也许您可以对数据框进行后处理,
nKCol = df['Contract']
oKCol = df['Contract'].copy()
# update cell to %b-%y string format; Nan if error
nKCol = pd.to_datetime(nKCol, errors='coerce').dt.strftime('%b-%y')
# update the column
df['Contract'] = nKCol
# fill Nan with original column
df['Contract'] = df['Contract'].fillna(oKCol)
推荐阅读
- php - 是否可以使 php utf8_encode / decode 功能无效?
- python-3.x - 如何防止 Python Kafka Producer 由于使用日志记录而失败
- html - Css Shadow box ::after arrox with border 方法
- python - Selenium 不会输入到 textarea 并引发 ElementNotInteractableException
- c# - C# 垃圾收集器会释放这些对象吗?
- laravel - 生成的带有迁移的数据库字段
- reactjs - REact 错误对象作为 React 子级无效(找到:[object Promise])。如果您打算渲染一组孩子,请改用数组
- java - cs 61b project1b 无法解析 Deque 中的方法获取
- unit-testing - 测试超时应该取消 EventChannel 并抛出 TimeoutException
- javascript - 使用 HTML 和 CSS 格式化来自 Firebase 的数据