社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

(python)使用numpy.genfromtxt填充列表中的数据(不同的数据类型)

QWERASDFYXCV • 5 年前 • 1633 次点击  

我有一个这样的data.txt

16.37.235.153|119.222.242.130|38673|161|17|62|4646|
16.37.235.153|119.222.242.112|56388|161|17|62|4646|
16.37.235.200|16.37.235.153|59009|514|17|143|21271|

我想得到一份表格:

list=[['16.37.235.153','119.222.242.130',38673,161,17,62,4646]
      ['16.37.235.153','119.222.242.112',56388,161,17,62,4646]
      ['16.37.235.200','16.37.235.153',59009,514,17,143,21271]]

我试图在dtype=none的情况下使用numpy.genfromtxt,但是我得到:

VisibleDeprecationWarning: Reading unicode strings without specifying the encoding argument is deprecated. Set the encoding, use None for the system default.
  list = numpy.genfromtxt('results.rw', dtype=None, delimiter = '|')

以下为列表:

[['8.254.200.14' 'False']
 ['8.254.200.14' 'False']
 ['8.254.200.46' 'False']
 ...
 ['217.243.224.144' 'False']
 ['217.243.224.144' 'False']
 ['217.243.224.144' 'False']]

谢谢你的帮助,提前谢谢你。

您好:)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39748
 
1633 次点击  
文章 [ 3 ]  |  最新文章 5 年前
QWERASDFYXCV
Reply   •   1 楼
QWERASDFYXCV    6 年前

谢谢你们,我已经修好了。我在genfromtxt中使用了错误的文件。我使用的文件只有一列…

另一个问题:有人能告诉我如何计算numpy ndarray中某个值的出现次数吗?

paddyg
Reply   •   2 楼
paddyg    6 年前

你可能会更接近

a = np.genfromtxt('data.txt', dtype=['S16', 'S16', 'i8', 'i8', 'i8', 'i8','i8'], delimiter='|')

但是你好像是在混合字符串和整数,所以也许你应该使用两个数组

编辑W.R.T.你的进一步(无关的问题):

获取numpy数组中项的频率的一种方法是对where或equality测试产生的布尔数组求和。即

a = np.random.randint(1, 10, (20000000,2))
(a == 7).sum()
=> 4442874
(a[:,0] == 7).sum()
=> 2220661
(a[:,1] == 7).sum()
=> 2222213
etc.
hpaulj
Reply   •   3 楼
hpaulj    6 年前
In [71]: txt = '''16.37.235.153|119.222.242.130|38673|161|17|62|4646|
    ...: 16.37.235.153|119.222.242.112|56388|161|17|62|4646|
    ...: 16.37.235.200|16.37.235.153|59009|514|17|143|21271|
    ...: '''

encoding 警告令人讨厌,但并不重要。

当dtype=none时,应该得到一个结构化数组 field 每列:

In [74]: data = np.genfromtxt(txt.splitlines(), encoding=None, dtype=None,delimiter='|')
In [75]: data
Out[75]: 
array([('16.37.235.153', '119.222.242.130', 38673, 161, 17,  62,  4646, False),
       ('16.37.235.153', '119.222.242.112', 56388, 161, 17,  62,  4646, False),
       ('16.37.235.200', '16.37.235.153', 59009, 514, 17, 143, 21271, False)],
      dtype=[('f0', '<U13'), ('f1', '<U15'), ('f2', '<i8'), ('f3', '<i8'), ('f4', '<i8'), ('f5', '<i8'), ('f6', '<i8'), ('f7', '?')])

这是1D。

作为列表(或元组)的列表

In [76]: data.tolist()
Out[76]: 
[('16.37.235.153', '119.222.242.130', 38673, 161, 17, 62, 4646, False),
 ('16.37.235.153', '119.222.242.112', 56388, 161, 17, 62, 4646, False),
 ('16.37.235.200', '16.37.235.153', 59009, 514, 17, 143, 21271, False)]

好像是在填写最后一个字段(在最后一个字段之后 | )使用布尔值 False . 也许可以用一些 filling 参数。

或者限制usecols来省略它

In [77]: data = np.genfromtxt(txt.splitlines(), encoding=None, dtype=None,delimiter='|',u
    ...: secols=range(7))
In [78]: data
Out[78]: 
array([('16.37.235.153', '119.222.242.130', 38673, 161, 17,  62,  4646),
       ('16.37.235.153', '119.222.242.112', 56388, 161, 17,  62,  4646),
       ('16.37.235.200', '16.37.235.153', 59009, 514, 17, 143, 21271)],
      dtype=[('f0', '<U13'), ('f1', '<U15'), ('f2', '<i8'), ('f3', '<i8'), ('f4', '<i8'), ('f5', '<i8'), ('f6', '<i8')])