我有一个具有715,014个条目的数据集。这是一个工作机密文件,因此我无法上传CSV文件。这是前10行:
ip,ping,主机名,端口
172.20.1.1.1,4 ms,[n/a],[n/s]
172.20.1.2,3 ms,[n/a],[n/s]
172.20.1.3,3 ms,[n/a],[n/s]
172.20.1.4,[n/a],[n/s],[n/s]
172.20.1.5,[n/a],[n/s],[n/s]
172.20.1.6,[n/a],[n/s],[n/s]
172.20.1.7,[n/a],[n/s],[n/s]
172.20.1.8,[n/a],[n/s],[n/s]
172.20.1.9,0 ms,[n/a],[n/s]172.20.1.10,1 MS,d36b3yz1-phth.regis.net,[n/s]
这是我尝试的:
import pandas as pd
import csv
df = pd.read_csv('Userpc.csv',quoting=csv.QUOTE_NONE, error_bad_lines=False)
df.info()
结果:
rangeIndex:1448条目,0至1447
数据列(总4列):
ip 1448非无效对象
ping 1448非无效对象
主机名1448非零对象
端口1447非挂钩对象
dtypes:对象(4)
内存用法:45.3 kb
Pandas如何错过我的大部分数据?当我写入新的.csv文件时,它也仅包含1448行而不是整个700,000行。
感谢您的宝贵时间,对我的问题的任何不良格式感到抱歉!
,而不是猜测熊猫发现不可接受的是什么是仔细审查输入的。阅读每条输入,解析它,更换可能对大熊猫很麻烦的物品,然后暂时存储它们。当您发现无法成功打印的线路以进行检查,然后更改解析器以适应您已确定的新案例。
一些示例:
- 将IP地址和主机名封闭在双引号标记中;即," 172.20.1.1"one_answers" d36b3yz1-phth.regis.net"。
- 替换MSEC中给出的ping时间,例如" 4 ms",在这种情况下为4。如果以后发现某些ping时间在分钟范围内,则调整解析器。
- 用空字符串替换[n/a]的ping时间。
- 除非有数据在这种情况下将数据包装在双引号标记中。
- 尝试将空白字符上的每一行分开,以便当您遇到样本中的第十条类似的线时,您将能够检测到两个记录的存在,每条记录都如上所述分别处理。
我会说,将临时记录放在(临时)sqlite3数据库表中,该数据库很容易丢入熊猫。