保留标题,同时附加到带有Python的Pandas数据帧

Ste*_*eve 1 python dataframe pandas

所以我正在解析许多文件中包含的数据,循环遍历它们并将某些元素存储在列表中,并使用Python将每个结果列表附加到带有Pandas的数据帧.

它有效,除了我无法弄清楚如何在追加时保持标题行.它会随着每个追加消失或重复.

以下代码用作最新代码的示例:

import pandas as pd

for i in range(1,4):
    data = [{'name': 'Company'+str(i), 'city': 'New York'}]

    stuff = []
    for element in data:
        stuff.append(element)

    df = pd.DataFrame(columns=["name",
                               "city"])

    for record in stuff:
        df = df.append(record, ignore_index=True)

    df.to_csv('test.csv', mode='a', header=False, index=False)
Run Code Online (Sandbox Code Playgroud)

使用此代码,输出(csv文件)是:

Company1    New York
Company2    New York
Company3    New York
Run Code Online (Sandbox Code Playgroud)

但我正在寻找输出:

name        city
Company1    New York
Company2    New York
Company3    New York
Run Code Online (Sandbox Code Playgroud)

谢谢!

EdC*_*ica 6

但你已经设定header=False:

df.to_csv('test.csv', mode='a', header=False, index=False)
Run Code Online (Sandbox Code Playgroud)

你应该做:

df.to_csv('test.csv', mode='a', header=True, index=False)
Run Code Online (Sandbox Code Playgroud)

您只需将其设置True为第一次迭代,然后再设置False为后续迭代

基本上你只需要做以下事情:

# add this outside your for loop
writeHeader = True

# use the following where you write to csv
if writeHeader is True:
    df.to_csv('test.csv', mode='a', header=True, index=False)
    writeHeader = False
else:
    df.to_csv('test.csv', mode='a', header=False, index=False)
Run Code Online (Sandbox Code Playgroud)

或类似的

所以完整的事情看起来像:

import pandas as pd
writeHeader = True

for i in range(1,4):
    data = [{'name': 'Company'+str(i), 'city': 'New York'}]

    stuff = []
    for element in data:
        stuff.append(element)

    df = pd.DataFrame(columns=["name",
                               "city"])

    for record in stuff:
        df = df.append(record, ignore_index=True)

    if writeHeader is True:    
        df.to_csv('test.csv', mode='a', header=True, index=False)
        writeHeader = False
    else:
        df.to_csv('test.csv', mode='a', header=False, index=False)
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这不起作用.它将添加标头,但每次附加到数据帧时也会复制它. (2认同)