防止pandas为每个chunk

时间:2018-03-07 16:11:42

标签: python pandas

我有一个带有丑陋标题的脏csv,我已将其格式化并存储在列表中。

我想通过chunk读取这个csv块,对数据执行一些正则表达式,然后写入新的csv。

我正在使用此功能

def format_data(data_location, formatted_header):
    df = pd.read_csv(data_location, sep=',', skiprows=1,
                     header=0, names=formatted_header, chunksize=10000)

    for chunk in df:
        chunk = chunk.replace('(?!(([^"]*"){2})*[^"]*$),', '', regex=True)
        chunk.to_csv('formatted_data.csv', mode='a', index=False)

据我了解我在这里做的事情:

pd.read_csv(data_location, sep=',', skiprows=1,
            header=0, names=formatted_header, chunksize=10000)

我正在从它的位置读取csv,跳过第一个丑陋的标题行并替换为我的formatted_header。

我的问题是,对于写入新CSV的每个新块,我看到每10,000行后重复格式化的标题行。我该如何防止这种情况发生?

1 个答案:

答案 0 :(得分:3)

由于您只想写一次标题,请使用布尔值来查看您是否在第一个块上。

例如:

write_header = True
for chunk in df:
    chunk = chunk.replace('(?!(([^"]*"){2})*[^"]*$),', '', regex=True)
    chunk.to_csv('formatted_data.csv', mode='a', index=False, header=write_header)
    write_header = False