在列 NP Genfromtxt 中选择一个 dtype



嗨,我对python很陌生,我需要从csv文件中提取一些布尔值。这是我数据集的一个简短示例:

Timestamp   FilteredEcg IsPeak  RRinterval  HR  Sickness    Ride    Note
300.0   -2.4042697707709204e-08 False   -   -   0   1   
300.005 0.00015629470247651288  False   -   -   0   1

以下是列数据类型的摘要:

  • 时间戳:浮点
  • 过滤心电图:浮子
  • IsPeak:布尔值
  • HR:布尔值
  • 疾病:国际
  • 骑行:int
  • 注意:字符串

如您所见,有时会缺少值。我的问题是检索布尔值。这是我在做什么:

dataset = np.genfromtxt('{}/{}'.format(directory, filename), delimiter="t", skip_header=1)
orig_rr = dataset[::,3] # OK
orig_ecg = dataset[::,1] # OK
orig_peak = dataset[::,2] # WRONG!
print(orig_peak) # here I get [nan, nan, ... , nan]

我认为这是一个选角问题。如何选择IsPeak列的数据类型?如果不能只转换一列,则可以全部转换它们。(我正在使用 numpy(

编辑

似乎我可以做这样的事情:

types = [np.float64, np.float64, np.bool,np.float64,np.float64, np.int, np.int, np.str]
dataset = np.genfromtxt('{}/{}'.format(directory, filename), delimiter="t", skip_header=1, dtype=types)

但它不保留 ndarray 形状,最初我有(456000, 8)和打印数据集:

[[ 1.20000000e+02 -1.09909475e-07             nan ...  0.00000000e+00
1.00000000e+00             nan]
[ 1.20005000e+02  1.12516659e-03             nan ...  0.00000000e+00
1.00000000e+00             nan]
[ 1.20010000e+02  5.23451481e-03             nan ...  0.00000000e+00
1.00000000e+00             nan]
...
[ 2.39998500e+03 -2.12878689e-02             nan ...  2.00000000e+00
6.00000000e+00             nan]
[ 2.39999000e+03 -8.18406955e-03             nan ...  2.00000000e+00
6.00000000e+00             nan]
[ 2.39999500e+03  1.35783998e-06             nan ...  2.00000000e+00
6.00000000e+00             nan]]

当我应用 dtype 更改时,我(456000,)为大小和打印数据集,我有:

[( 120.   , -1.09909475e-07, False, nan, nan, 0, 1, '')
( 120.005,  1.12516659e-03, False, nan, nan, 0, 1, '')
( 120.01 ,  5.23451481e-03, False, nan, nan, 0, 1, '') ...
(2399.985, -2.12878689e-02, False, nan, nan, 2, 6, '')
(2399.99 , -8.18406955e-03, False, nan, nan, 2, 6, '')
(2399.995,  1.35783998e-06, False, nan, nan, 2, 6, '')]

关于如何保留初始形状或如何像添加dtype之前那样提取所有列值的任何想法?在这个插件之前,我能够做这样的事情来检索所有第一个值:

dataset[::,1]

现在我做不到

似乎您的所有单元格都没有制表符间隔。我使用您提供的示例数据在.txt文件中进行了检查和修改。然后,我用制表符分隔符和与 nans 关联的破折号阅读它:

import pandas as pd
data=pd.read_csv('/path/to/file.txt', delimiter='t', na_values='-')

并且可以正确检索布尔值,例如:

data.IsPeak

相关内容

最新更新