首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >For循环到pandas数据帧中

For循环到pandas数据帧中
EN

Stack Overflow用户
提问于 2020-08-15 02:41:06
回答 1查看 32关注 0票数 1

我有以下一段代码,它可以正常工作,但可以打印出它应该输出的数据。我正在尝试(未成功)将结果放入数据帧中,以便可以将结果导出到csv文件。我正在循环一个json文件,结果是正确的,我只需要两列来打印输出到一个数据帧中,而不是打印结果。我去掉了导致错误的代码,所以它可以运行。

代码语言:javascript
运行
复制
import json
import requests
import re 
import pandas as pd

data = {}
df = pd.DataFrame(columns=['subtechnique', 'name'])
df

RE_FOR_SUB_TECHNIQUE = r"(T\d+)\.(\d+)"
r = requests.get('https://raw.githubusercontent.com/mitre/cti/master/enterprise-attack/enterprise-attack.json', verify=False)

data = r.json()

objects = data['objects']
for obj in objects:
    ext_ref = obj.get('external_references',[])
    revoked = obj.get('revoked') or '*****'
    subtechnique = obj.get('x_mitre_is_subtechnique')
    name = obj.get('name')    
    for ref in ext_ref:
        ext_id = ref.get('external_id') or ''
        if ext_id:
            re_match = re.match(RE_FOR_SUB_TECHNIQUE, ext_id)
            if re_match:
                technique = re_match.group(1)
                sub_technique = re_match.group(2)
                print('{},{}'.format(technique+'.'+sub_technique, name))

除非有更简单的方法将每一行的结果放在循环中并将其附加到csv文件中。

任何帮助都是非常感谢的。

谢谢

EN

Stack Overflow用户

回答已采纳

发布于 2020-08-15 02:57:38

在这种情况下,直接编写csv文件可能比通过Pandas更容易:

代码语言:javascript
运行
复制
with open("enterprise_attack.csv", "w") as f:
    my_writer = csv.writer(f)   
    for obj in objects:
        ext_ref = obj.get('external_references',[])
        revoked = obj.get('revoked') or '*****'
        subtechnique = obj.get('x_mitre_is_subtechnique')
        name = obj.get('name')
        for ref in ext_ref:
            ext_id = ref.get('external_id') or ''
            if ext_id:
                re_match = re.match(RE_FOR_SUB_TECHNIQUE, ext_id)
                if re_match:
                    technique = re_match.group(1)
                    sub_technique = re_match.group(2)
                    print('{},{}'.format(technique+'.'+sub_technique, name))
                    my_writer.writerow([technique+"."+sub_technique, name])

应该注意的是,上述操作将覆盖任何先前运行的输出。如果您希望保留多次运行的输出,请将文件模式更改为"a":

代码语言:javascript
运行
复制
with open("enterprise_attack.csv", "a") as f:
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63418400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档