首页 > 解决方案 > df.csv 没有保存实际的数据帧

问题描述

该代码工作正常并打印所有所需的值,但是当我尝试将其另存为 df 到 csv 时,所有行都是相同的。

a.csv 文件内容

A.com

AMD.com

AMD.com

美国在线

美国在线

AWS.com

AWS.com

3ammagazine.com

3dmail.com

3email.com

3xl.net

444.net

4email.com

4email.net

4mg.com

4newyork.com

whdskcisail.com

wrestlingpages.com

雷克斯汉姆网

import whois
import matplotlib.pyplot as plt
import numpy as np  
import pandas as pd  
import socket
import os
import csv 
import datetime
import time
import requests
from ipwhois import IPWhois
from urllib import request
from ipwhois.utils import get_countries
import tldextract
from ipwhois.utils import get_countries
countries = get_countries(is_legacy_xml=True)
from ipwhois.experimental import bulk_lookup_rdap
from ipwhois.hr import (HR_ASN, HR_ASN_ORIGIN, HR_RDAP_COMMON, HR_RDAP, HR_WHOIS, HR_WHOIS_NIR)
countries = get_countries(is_legacy_xml=True)
import ipaddress

df = pd.read_csv('a.csv', nrows=100)

#TimeOut Setting
s = socket.socket()
s.settimeout(10)

#Date Processing Function

def check_date_type(d):
    if type(d) is datetime.datetime:
        return d
    if type(d) is list:
        return d[0]
for index,row in df.iterrows():
  try:
      DN = df.iloc[index]['Domains']
      ip = socket.gethostbyname(DN)
      ipwhois = IPWhois(ip).lookup_whois()
      print(DN)
      print(ip)
      print(ipwhois)
      df['IPcity'][index] = ipwhois['nets'][0]['city']
      df['ASNumber'][index] = ipwhois['asn']
      df['NetAddr'][index] = ipwhois['nets'][0]['address']
      df['NetCity'][index] = ipwhois['city']
      df['NetPostCode'][index] = ipwhois['nets'][0]['postal_code']
      df.to_csv('a1.csv', index=False)
  except Exception as e:
    print(e) 
    df['e'] = e # want to save the errors in a differet column
    df.to_csv('a2.csv', index=False)

标签: pythonpandasdataframe

解决方案


发生这种情况是因为您在循环的每次迭代中都覆盖了 .csv 文件。如果您移动df.to_csv()循环外部,您将获得所需的数据框:

...
for index,row in df.iterrows():
  try:
      DN = df.iloc[index]['Domains']
      ip = socket.gethostbyname(DN)
      ipwhois = IPWhois(ip).lookup_whois()
      print(DN)
      print(ip)
      print(ipwhois)
      df['IPcity'][index] = ipwhois['nets'][0]['city']
      df['ASNumber'][index] = ipwhois['asn']
      df['NetAddr'][index] = ipwhois['nets'][0]['address']
      df['NetCity'][index] = ipwhois['city']
      df['NetPostCode'][index] = ipwhois['nets'][0]['postal_code']

  except Exception as e:
    print(e) 
    df['e'] = e # want to save the errors in a differet column
df.to_csv('a1.csv', index=False)

推荐阅读