将openpyxl读取一个EXCEL文件获取的sheet内容转为dataframe再使用pandas另存为新的文件发现新文件大小比原文件小
时间: 2023-12-06 13:42:38 浏览: 130
这种情况可能是由于以下原因导致的:
1. 文件格式不同:原文件可能是.xlsx格式,而新文件可能是.csv格式,后者的文件大小通常比前者小。
2. 数据类型不同:在将数据从Excel文件转换为DataFrame时,可能会出现数据类型转换的情况。例如,原文件中的某些列是数字类型,但是在转换为DataFrame时被转换为了字符串类型。这可能会导致新文件大小的变化。
3. 空值处理:在将数据从Excel文件转换为DataFrame时,可能会对空值进行处理。例如,将空值替换为0或其他值。这可能会导致新文件大小的变化。
为了确定原因,可以尝试将新文件转换为与原文件相同的格式,并检查数据类型和空值处理。如果这些都相同,那么文件大小的变化可能是由于数据量减少或其他原因导致的。
相关问题
使用openpyxl读取一个EXCEL文件获取的sheet内容转为dataframe再使用pandas另存为新的文件发现新文件的单元格包含原文件没有的_x000D_
这个问题通常是由于源文件中包含回车符(Carriage Return)或换行符(Line Feed)引起的,这些符号在不同操作系统和软件中的显示方式可能会有所不同。
你可以尝试使用 `strip()` 函数去除这些符号,然后再另存为新的文件。具体步骤如下:
```python
import openpyxl
import pandas as pd
# 打开源文件
workbook = openpyxl.load_workbook('source.xlsx')
# 读取指定的 sheet
worksheet = workbook['Sheet1']
# 将 sheet 转为 dataframe
data = worksheet.values
columns = next(data)[1:]
df = pd.DataFrame(data, columns=columns)
# 去除回车符和换行符
df = df.replace('\r\n', '', regex=True)
# 另存为新文件
df.to_excel('new_file.xlsx', index=False)
```
这样处理后,新文件中的单元格就不会包含 `_x000D_` 了。
给我一段代码,功能如下:获取了一个excel文件路径并读取为dataframe文件,将dataframe文件改变内容后不用另存,直接覆盖原来的excel文件
在Python中,我们可以使用pandas库处理Excel文件,并结合`openpyxl`或`xlsxwriter`库来直接在原文件上修改数据,而无需另存。这里是一个示例,假设你已经安装了`pandas`, `openpyxl`或`xlsxwriter`:
```python
import pandas as pd
# 假设你已经有了一个excel文件路径
file_path = "example.xlsx"
# 使用pandas读取Excel文件
df = pd.read_excel(file_path)
# 进行一些数据操作,例如添加、删除或更新一行或一列
# df.loc[0, 'new_column'] = 'new_value' # 添加新列
# df.drop(index=0, inplace=True) # 删除某行
# df['column_name'][index] = new_value # 更新值
# 现在我们使用openpyxl对原文件进行写入,注意这里使用的是追加模式('a'),而不是覆盖模式('w')
# 如果你想覆盖原有文件,可以去掉'a',但是要注意这是会丢失原始数据的行为
with pd.ExcelWriter(file_path, engine='openpyxl', mode='a') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
# 或者如果你喜欢使用xlsxwriter,下面的代码类似,不过需要先创建workbook
# from xlsxwriter.workbook import Workbook
# workbook = Workbook(file_path)
# worksheet = workbook.active
# df.to_excel(worksheet, index=False)
# workbook.close()
# 提醒:在实际操作中,记得备份原始文件以防意外!
阅读全文