Python 使用pandas to_csv将结果写入csv
下面是我的代码,它从excel工作表中获取实例名称,并在aws帐户中搜索实例名称,然后获取实例id。因此,该过程工作正常。现在我想将数据写入csv,就像在csv中一样,必须有两列名称,如instancename和instanceId,并且数据应该打印在各自的列中。请帮助我获得所需的输出。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
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这是一个好消息,有些文件相当大,这可能会有所帮助