使用python将数据写入具有列名的CSV文件

时间:2020-06-24 06:48:54

标签: python pandas dataframe

我使用以下python代码将数据写入具有列名的CSV文件中。

def get_filename_datetime():
    # Use current date to get a text file name.
    return "Report-" + str(datetime.date.today())
# Get full path for writing.
filename = get_filename_datetime()
Data = [["FirstName", "LastName","Failed_User_Id"],
          [firstname, lastname, faileduserid]]
Reportfilename = os.path.join(reportspath, filename)
myfile = open(Reportfilename + '-Results.csv', "a+")
with myfile:
    writer = csv.writer(myfile)
    writer.writerows(Data)

我在文件中得到的输出为:

actual output

我的预期输出是:

我在文件中得到的输出为:

expected output

但是我正在为每一行打印列名。

4 个答案:

答案 0 :(得分:0)

那是因为它们在列表Data中:

Data = [["FirstName", "LastName","Failed_User_Id"],
                      [firstname, lastname, faileduserid]]

只需删除它们:

Data = [[firstname, lastname, faileduserid]]

有关如何编写标头here的示例。

答案 1 :(得分:0)

我猜您正在循环使用方法get_filename_datetime,因此您一直将其附加到CSV文件中:

Data = [["FirstName", "LastName","Failed_User_Id"],
                      [firstname, lastname, faileduserid]]

解决方案是将列名移出循环,仅附加行数据:

 Data = [[firstname, lastname, faileduserid]]

答案 2 :(得分:0)

重复出现标题是因为每次添加一行时,也会再次添加标题。您需要将Data中的第一行分开并写入一次

def get_filename_datetime():
    # Use current date to get a text file name.
    return "Report-" + str(datetime.date.today())
# Get full path for writing.
filename = get_filename_datetime()
headers = ["FirstName", "LastName","Failed_User_Id"]     
Data = [firstname, lastname, faileduserid]
Reportfilename = os.path.join(reportspath, filename)
myfile = open(Reportfilename + '-Results.csv', "a+")
with myfile:
   writer = csv.writer(myfile)
   if(os.stat(myfile).st_size == 0):
      writer.writerows(header) 
    writer.writerows(Data)

答案 3 :(得分:0)

@mtdot和@schoon的答案都是正确的

如果您想使用熊猫

您可以使用此

`
columns = ['FirstName', 'LastName', 'Failed_User_Id']
header = True
for dataset in datasets:
    df = pd.DataFrame(dataset)
    df = df[columns]
    mode = 'a+'
    df.to_csv('./new.csv', encoding='utf-8', mode=mode, header=header, index=False)
    header = False
`