【问题标题】:Script to parse, delete & mask IP addresses解析、删除和屏蔽 IP 地址的脚本
【发布时间】:2019-02-28 20:33:36
【问题描述】:

我有一个包含 3 列的 CSV 文件:

  • 第 1 列 - 总体价值 - ID_IP 地址 [51515151 99.999.999.999]

  • 第 2 列- 时间列 - 时间 [2019-02-25T19:04:59.999-0500]

  • 第 3 列 - IP 地址(IPv4 和 IPv6) - IP [99.999.999.999]

我试图解析第一列中的 ID,方法是将其分成两列,分别是 ID 和 IP 地址,然后丢弃具有新创建的 IP 地址的列,因为它们已经包含在第 3 列中。

这是我目前的代码:

import pandas as pd
from pandas import read_csv
df1= pd.read_csv('C:\\Users\\[redacted]\\Documents\\Python\\Parsing.csv')
df1.dropna(inplace = True) # dropping null value columns to avoid errors
df1 = df1["Overall Value"].str.split(" ", n = 1, expand = True) # updating data frame with split value columns
df1["ID"]= df1[0] # making seperate ID column from new data frame
df1["IP2"]= df1[1] # making seperate IP column from new data frame
df1["Time"]= df1[2]
df1["IP"]= df1[3]
df1.drop(columns =["IP2"], inplace = True) # deleting column 2
df2 = pd.read_csv('C:\\Users\\[redacted]\\Documents\\Python\\Parsingcopy.csv', index_col=0)
df1 = df1.map(df2)
df1.to_csv('C:\\Users\\[redacted]\\Documents\\Python\\Parsingcopy2.csv')

为什么会出现以下错误?

C:\Users\[Redacted]>C:\Python27\python.exe C:\Users\[Redacted]\Documents\Python\Parsing.py
Traceback (most recent call last):
File "C:\Users\[Redacted]\Documents\Python\Parsing.py", line 21, in <module>
    df1["RestofData"]= df1[2]
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2139, in __getitem__
    return self._getitem_column(key)
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2146, in _getitem_column
    return self._get_item_cache(key)
  File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 1842, in _get_item_cache
    values = self._data.get(item)
  File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 3843, in get
    loc = self.items.get_loc(item)
  File "C:\Python27\lib\site-packages\pandas\core\indexes\base.py", line 2527, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas\_libs\index.pyx", line 117, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\index.pyx", line 139, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 1265, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas\_libs\hashtable_class_helper.pxi", line 1273, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 2

【问题讨论】:

    标签: python pandas python-2.7 dataframe


    【解决方案1】:

    通过这样做:

    df1 = df1["Overall Value"].str.split(...)
    

    您不是更新现有数据框,而是创建一个新数据框并将df1 名称指向它。

    df1 现在不再引用原始数据帧,所以 df[2](和 df[3])不存在,这就是 KeyError: 2 告诉你的。

    相反,您应该为临时数据框使用不同的名称,然后使用它来更新原始数据框中的列。

    此外,不要先创建两个新列,然后立即丢弃其中一个,而应该只使用您真正想要的那个。

    对于已经存在的其余列,您应该使用索引 1 和 2 而不是 2 和 3,但由于它们已经包含在 df1 中,因此没有必要“重新插入”它们。

    类似这样的:

    ids_ips = df1["Overall Value"].str.split(" ", n = 1, expand = True)
    df1["ID"] = ids_ips[0]
    # df1["IP2"] = ids_ips[1]  <-- don't do this
    df1["Time"] = df1[1]  # this is probably not necessary, too
    df1["IP"] = df1[2]    # neither is this
    

    【讨论】:

    • 谢谢@mkrieger1 我更新了我的脚本。新文件仍然是空白的,您能否查看一下并告诉我我在这里做错了什么
    • 请注意,在这里说“谢谢”的首选方式是对好的问题和有用的答案进行投票(一旦你有足够的声誉这样做),并接受最有帮助的答案您提出的任何问题(这也会稍微提升您的声誉)。请参阅About 页面和What should I do when someone answers my question?
    • import pandas as pd from pandas import read_csv data = pd.read_csv ('C:\\Users\\[Redacted]\\Documents\\Python\\[Redacted]_Sample_1.csv') data.dropna(inplace = True) new = data["Overall Value"].str.split(" ", n = 1, expand = True) data["ID"]= new[0] data["IP"]= new[1] data["Time"]= new[2] data.drop(columns =["Overall Value"], inplace = True) new.to_csv(r'C:\\Users\\[Redacted]\\Documents\\Python\\[Redacted]_Sample_2.csv')
    • 这将是一个新问题,请考虑单独发布。
    • 我也推荐阅读How do I ask a good question?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 2011-08-08
    相关资源
    最近更新 更多