我意识到这已被问过很多次了,但是我一直在尝试不同的解决方案而且没有一个能为我工作 - 显然我做错了什么,但是我是不知道是什么。
我们正在学习如何在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()
非常感谢您提供给我的任何和所有帮助/建议/提示! (如果代码太乱,无需更正我的代码,但只是想添加它,所以我看起来并没有想要为我完成作业)
答案 0 :(得分:0)
所以,这里有一些方向。
首先,不直接关于你的问题,可以链接上下文管理器,即:
with open('input') as inp, open('output') as out:
do_your_stuff
这样可以避免一些压痕。
更多问题:没有办法"删除"大多数现代文件系统的列,所以你需要阅读,处理,写入其他文件(诚实,有方法,但这需要方式更多的工作)。在您的情况下,处理将选择要写入的内容(或要跳过的内容)。在保持代码可读性和可维护性的同时,最好的方法是使用DictReader
和DictWriter
。一旦您通过命名的实体读取/写入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)