【问题标题】:python xlsx to csv with records of variable lengthpython xlsx 到 csv 与可变长度的记录
【发布时间】:2020-08-14 20:31:18
【问题描述】:
#example 1
from xlsx2csv import Xlsx2csv

Xlsx2csv("C:\CS\Archiv-Fix_csv_.xlsx", outputencoding="utf-8").convert("C:\CS\name.csv")

#example 2
import pandas as pd

read_file = pd.read_excel (r'C:\CS\Fix_csv_.xlsx', sheet_name='Patch')
read_file.to_csv (r'C:\CS\name.csv', index = None, header=True)

这按预期工作,但我的问题是处理可变长度的记录。

假设我的第一行被填充到 P 列,第 98 行到 K 和 第 2980 行直到 M 等等。

所以我得到的是一个带有分隔符的 csv 文件,用于将每一行填充到 P 列:

A,B,C,D,E,F,G,K,L,M,N,O,P

A,,C,,E,F,G,K,,,,,,

A,B,C,D,E,,,K,,M,,,

我需要的是:

A,B,C,D,E,F,G,K,L,M,N,O,P

A,,C,,E,F,G,K

A,B,C,D,E,,,K,,M

希望你能阻止我 提前致谢 问候

【问题讨论】:

  • 所以您只想从 csv 文件中删除尾随逗号?使用循环很简单,但会使csv文件无效。

标签: python excel pandas csv


【解决方案1】:

示例 2 的问题是 read_excel 返回的数据框必须填充所有行。 pandas 库正在插入 nan 值来做到这一点。不幸的是, to_csv 函数没有跳过尾随 nan 字段的选项。因此,您必须自己通过迭代数据框中的行来做到这一点,如下所示:

import csv
import math
import pandas as pd

read_file = pd.read_excel ('demo.xlsx', header=None, sheet_name='Sheet1')
with open('demo.csv', 'w') as csvfile:
  writer=csv.writer(csvfile)
  for row in read_file.iterrows():
    last=0
    # this loop can be optimized by iterating backwards for first non nan
    for idx,i in enumerate(row[1]):
      if not isinstance(i, float) or not math.isnan(i): last=idx+1
    writer.writerow(row[1][0:last])

也许 xlsx2csv 有更好的解决方案,但我不熟悉那个包。

【讨论】:

    猜你喜欢
    • 2015-10-18
    • 2022-08-15
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多