首页 > 解决方案 > 修复数据框中超出 CSV 字段长度的额外字段

问题描述

所以我创建了一个新的 csv,它基于由 \t 分隔的其他 csv 连接。大多数行已成功映射到 Excel 中与其关联的单元格,但少数超出字段数的行除外。

b'Skipping line 4046: expected 39 fields, saw 41\nSkipping line 7924: expected 39 fields, saw 40\n'

我想通过拆分它们并将它们映射到列来修复在一个单元格中包含所有数据的行。最后一列可以保留该行的额外数据。

第 80 行是要修复的“坏”行的示例:

第 80 行是一个示例

path = r'C:\Users\afsulta\.spyder-py3\ISG\master_reten_isg.csv'
files = os.listdir(os.getcwd())
csv_files = [f for f in files if f[-3:] == 'csv' and 'reten_isg' in f] # identify reten_isg files
master = pd.DataFrame()

for file in csv_files:
    df = pd.read_csv(file, skipinitialspace=True, sep='\t', header=0, encoding='latin-1', low_memory=False, delimiter='\t', error_bad_lines=False) # Ignores errors and corrupt data
    df.columns = df.columns.str.strip() # remove whitespace from columns
    df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x) # strip leading and trailing whitespace from rows
    master = master.append(df, ignore_index=True) # concatenate each isg file to master

如果行的条目超过字段长度,我将如何编写代码将额外的字段组合到最后一个单元格中?这是解决此问题的最佳方法吗?其他解决方案是什么,如果可能的话,最好的解决方案是什么?

标签: pythonexcelpandascsvdataframe

解决方案


如果我理解您的问题,那么您在某些导致问题的文件中几乎没有多余的列。您可以使用pandas.concat。附件是我所说的片段的图像。

在此处输入图像描述


推荐阅读