For循环进入熊猫数据框

时间:2020-08-14 18:41:06

标签: python-3.x pandas dataframe

我有以下一段代码,它可以工作,但可以按需打印出数据。我正在尝试(未成功)将结果放入数据框,以便将结果导出到csv文件。 我正在遍历一个json文件,结果是正确的,我只需要打印两列即可进入数据框而不是打印结果。我取出了导致错误的代码,因此它将运行。

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文件中。

感谢您的帮助。

谢谢

1 个答案:

答案 0 :(得分:2)

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

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”:

with open("enterprise_attack.csv", "a") as f: