numpy genfromtxt转换器未知列数

2024-10-01 10:19:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个数据数字文件,其中十进制分隔符是逗号。所以我使用lambda函数进行转换:

import numpy as np
def decimal_converter(num_cols):
    conv = dict((col, lambda valstr: \
    float(valstr.decode('utf-8').replace(',', '.'))) for col in range(nb_cols))
    return conv

data = np.genfromtxt("file.csv", converters = decimal_converter(3))

文件中的数据如下:

^{pr2}$

在这里,我的函数decimal_converter我需要指定我的文件包含的列数。通常,我不需要指定numpy.genfromtxt文件中的列数,它将获取它找到的所有列。我想保留这个功能,即使当使用转换器选项。在


Tags: 文件数据lambda函数numpynp数字col
2条回答

使用^{}库可能不是您的选择,但是如果是的话,它的函数^{}有一个decimal参数,可以用来配置小数点字符。例如

In [36]: !cat file.ssv
    0; 0,28321815;  0,5819178
    1; 0,56868281;  0,85621369
    2; 0,24022026;  0,53490058
    3; 0,63641921;  0,0293904
    4; 0,65585546;  0,55913776

In [37]: import pandas as pd

In [38]: df = pd.read_csv("file.ssv", delimiter=';', decimal=',', header=None)

In [39]: df
Out[39]: 
   0         1         2
0  0  0.283218  0.581918
1  1  0.568683  0.856214
2  2  0.240220  0.534901
3  3  0.636419  0.029390
4  4  0.655855  0.559138

[5 rows x 3 columns]

然后你就拥有了熊猫的所有优点来操纵这些数据。或者您可以将数据帧转换为numpy数组:

^{pr2}$

由于genfromtxt()接受迭代器,因此可以通过应用转换函数传递迭代器,然后可以避免使用converters参数:

import numpy as np

def conv(x):
    return x.replace(',', '.').encode()

data = np.genfromtxt((conv(x) for x in open("test.txt")), delimiter=';')

相关问题 更多 >