Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pandas to_csv将结果写入csv_Python_Pandas_Export To Csv - Fatal编程技术网

Python 使用pandas to_csv将结果写入csv

Python 使用pandas to_csv将结果写入csv,python,pandas,export-to-csv,Python,Pandas,Export To Csv,下面是我的代码,它从excel工作表中获取实例名称,并在aws帐户中搜索实例名称,然后获取实例id。因此,该过程工作正常。现在我想将数据写入csv,就像在csv中一样,必须有两列名称,如instancename和instanceId,并且数据应该打印在各自的列中。请帮助我获得所需的输出。csv与数据重叠,打开csv后,我只能看到其中的最后一个值,因为我的脚本覆盖了以前的结果 import pandas as pd from pandas import ExcelWriter from panda

下面是我的代码,它从excel工作表中获取实例名称,并在aws帐户中搜索实例名称,然后获取实例id。因此,该过程工作正常。现在我想将数据写入csv,就像在csv中一样,必须有两列名称,如instancename和instanceId,并且数据应该打印在各自的列中。请帮助我获得所需的输出。csv与数据重叠,打开csv后,我只能看到其中的最后一个值,因为我的脚本覆盖了以前的结果

import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import numpy as np
import os
import boto3
client = boto3.client('ec2')
THIS_FOLDER = os.path.dirname(os.path.abspath(__file__))
my_file = os.path.join(THIS_FOLDER, 'example.xlsx')

df = pd.read_excel(my_file, sheet_name='Sheet2')

list1 = df['EC2NAMES']
print(list1)
client = boto3.client('ec2')
for names in list1:
    custom_filter = [{
        'Name':'tag:Name', 
        'Values': [names]}]
    print(names)
    instances = client.describe_instances(Filters=custom_filter)
    for instance in instances['Reservations']:
        for key in instance["Instances"]:
            x = key['InstanceId']
            print(x)
            data = pd.DataFrame({'A' : [names],'B' : [x]})
            data.to_csv('df111111.csv')
预期产出:

Instancename  InstanceID
testinstance  123456
testinstance1 12345656312
testinstance2 12345657237
实际产量:

Instancename  InstanceID
testinstance2 12345657237

您的代码为for循环的每次迭代生成一个新的“data”变量。我的尝试是在开始循环之前创建一个空白数据变量。在每个循环的数据帧中添加一个新片段,一旦退出循环,就将其保存到csv

data = pd.DataFrame()
list1 = df['EC2NAMES']
print(list1)
client = boto3.client('ec2')
for names in list1:
    custom_filter = [{
        'Name':'tag:Name', 
        'Values': [names]}]
    print(names)
    instances = client.describe_instances(Filters=custom_filter)
    for instance in instances['Reservations']:
        for key in instance["Instances"]:
            x = key['InstanceId']
            print(x)
            data = data.append(pd.DataFrame({'A' : [names],'B' : [x]}))
data.to_csv('df111111.csv')

您可以使用pandas
concat
append
,但最好的方法是将数据存储到列表中,最后制作一个数据帧并将其保存为csv

import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import numpy as np
import os
import boto3
client = boto3.client('ec2')
THIS_FOLDER = os.path.dirname(os.path.abspath(__file__))
my_file = os.path.join(THIS_FOLDER, 'example.xlsx')

df = pd.read_excel(my_file, sheet_name='Sheet2')

list1 = df['EC2NAMES']
print(list1)
client = boto3.client('ec2')
data = []
for names in list1:
    custom_filter = [{
        'Name':'tag:Name', 
        'Values': [names]}]
    print(names)
    instances = client.describe_instances(Filters=custom_filter)
    for instance in instances['Reservations']:
        for key in instance["Instances"]:
            x = key['InstanceId']
            print(x)
            data.append([names, x])
pd.DataFrame(data, colums=['A','B']).to_csv('df111111.csv')


每次通过循环时,您都会覆盖CSV文件。您应该将所有数据合并到一个数据帧中,然后在末尾将其写入CSV一次。请发布数据<代码>数据。to_csv('df111111.csv')在每次迭代中覆盖
数据
对象我可以使用to在同一csv中写入不同的工作表吗_csv@BarmarI非常感谢您的快速响应,但做出更改会创建一个空白df111111。csvI我想我的错误是在倒数第二行,做了一个小更改,基本上,我附加到了数据变量,但是没有data=data.append(…)返回的任何东西都不能正常工作。谢谢Barmar请参阅下面poojan的评论,解释为什么他的方法更好谢谢poojan的响应,但解决方案打印出的响应与以前相同。根据Barmar的输入,它成功了。@sree代码中有一个小错误。修复了此问题。您现在可以运行解决方案。这是因为将数据存储为列表比使用append强度低吗@PoojanYes在pandas数据框上的append方法肯定比仅仅将数据追加到列表要昂贵得多。@Poojan这是一个好消息,有些文件相当大,这可能会有所帮助