从大型CSV文件中删除最后一列

2024-05-19 22:10:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的CSV文件,我想用datagrip上传到postgres。当我上传它时,一些记录出现以下错误:

11807:98: actual: value separator (,), expected: record separator (\n) 

问题是只有19列被识别,而在极少数记录中有20个值。对于这些记录,它根本不导入记录。我确实想要数据库中的所有行

我原以为这在python中是小菜一碟。因此,我开始使用pandas并用以下行加载数据:

 df = pd.read_csv('filename.csv', sep='delimiter', header=None)

它确实包含该文件。然而,要删除19个逗号后面行上的所有值,或者只添加一个完整的第20列(稍后可以删除),要比我预期的困难得多。感觉这是一个微不足道的问题,我需要朝着正确的方向努力


Tags: 文件csv数据库value错误记录postgresrecord
2条回答

这将生成一个包含30列的数据帧,然后删除第20列之后的所有列

df = pd.DataFrame({f"col{i}":[1,2,3] for i in range(30)})

df = df.drop(columns=[c for c in df.columns[20:]])

以这种方式将其读入数据帧不会给您带来任何好处,因为每个单元格将包含一行文件

请改用csv模块,因为它不会尝试将文件作为固定宽度的表来读取

import csv

with open('filename.csv', 'r') as i, open('fixed.csv', 'w') as o:
    cr = csv.reader(i)
    cw = csv.writer(o)
    for row in cr:
        cw.writerow(row[0:19])


相关问题 更多 >