删除列在Python中使用CSV模块

时间:2018-02-19 22:10:36

标签: python csv

我意识到这已被问过很多次了,但是我一直在尝试不同的解决方案而且没有一个能为我工作 - 显然我做错了什么,但是我是不知道是什么。

我们正在学习如何在Python中清理数据,所以我尝试做的是将文本文件(已经从excel转换为文本文件)作为输入并输出我的清理数据。数据是文本和数字的混合,每个单元格都有文本或数字,但不是两者。我试图删除某些列,但我无法弄清楚如何删除。我真的很感激,如果我能使用csv包得到答案(或根本没有包) - 我知道熊猫应该是有用的,但我试图通过我们在使用的东西类。

这是我现在的代码;当我运行它时,我只得到一张空白的Excel表格作为我的输出。

import csv

def airbnb_csv():

    source = '/Users/(myname)/Desktop/airbnb.txt'
    target = 'scrubbed_airbnb2.csv'

    with open(source,'r') as fp_in:
        reader = csv.reader(fp_in, delimiter=',')
        with open(target,'w') as fp_out:
            writer = csv.writer(fp_out, delimiter=',')
            for r in reader:
                writer.writerow((r[2], r[3], r[5], r[7], r[8], r[9], 
                r[10], r[11], r[13]))

我有其他代码确实让我填写了excel表作为输出。这是我的原始代码,但速度很快。

for row in fp_in:
     if (row[:5].isdigit()):
         v = row.split()
         v = v[:9]
         writer.writerow(v)
         if row.startswith("room_id") and not header_written:
            header_written = True
            v = row.split()

非常感谢您提供给我的任何和所有帮助/建议/提示! (如果代码太乱,无需更正我的代码,但只是想添加它,所以我看起来并没有想要为我完成作业)

1 个答案:

答案 0 :(得分:0)

所以,这里有一些方向。

首先,不直接关于你的问题,可以链接上下文管理器,即:

with open('input') as inp, open('output') as out:
    do_your_stuff

这样可以避免一些压痕。

更多问题:没有办法"删除"大多数现代文件系统的列,所以你需要阅读,处理,写入其他文件(诚实,有方法,但这需要方式更多的工作)。在您的情况下,处理将选择要写入的内容(或要跳过的内容)。在保持代码可读性和可维护性的同时,最好的方法是使用DictReaderDictWriter。一旦您通过命名的实体读取/写入csv行,一切都变得简单:

fields_needed = ['price', 'rooms']
with open(source) as fp_in, open(target, 'w') as fp_out:
    reader = csv.DictReader(fp_in)
    writer = csv.DictWriter(fp_out, fieldnames=fields_needed, extrasaction='ignore')

    writer.writeheader()
    for r in reader:
        writer.writerow(r)