Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用numpy有条件地返回列_Python_Csv_Numpy - Fatal编程技术网

在python中使用numpy有条件地返回列

在python中使用numpy有条件地返回列,python,csv,numpy,Python,Csv,Numpy,我在一个名为test.csv的文件中有以下数据集: ID,ENROLLMENT_DATE,TRAINER_MANAGING,TRAINER_OPERATOR,FIRST_VISIT_DATE 1536D,12-Feb-12,"06DA1B3-Lebanon NH",,15-Feb-12 F15D,18-May-12,"06405B2-Lebanon NH",,25-Jul-12 8096,8-Aug-12,"0643D38-Hanover NH","0643D38-Hanover NH",25-

我在一个名为test.csv的文件中有以下数据集:

ID,ENROLLMENT_DATE,TRAINER_MANAGING,TRAINER_OPERATOR,FIRST_VISIT_DATE
1536D,12-Feb-12,"06DA1B3-Lebanon NH",,15-Feb-12
F15D,18-May-12,"06405B2-Lebanon NH",,25-Jul-12
8096,8-Aug-12,"0643D38-Hanover NH","0643D38-Hanover NH",25-Jun-12
A036,1-Apr-12,"06CB8CF-Hanover NH","06CB8CF-Hanover NH",9-Aug-12
8944,19-Feb-12,"06D26AD-Hanover NH",,4-Feb-12
1004E,8-Jun-12,"06388B2-Lebanon NH",,24-Dec-11
16D87,3-Jul-12,"0649597-White River VT","0649597-White River VT",30-Mar-12
30D7,11-Nov-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",30-Nov-11
3AE2,21-Feb-12,"06405B2-Lebanon NH",,26-Oct-12
B0FE,17-Feb-12,"06D1B9D-Hartland VT",,16-Feb-12
127A1,11-Dec-11,"064456E-Hanover NH","064456E-Hanover NH",11-Nov-12
161FF,20-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",3-Jul-12
F4F9,30-Nov-11,"063B208-Randolph VT","063B208-Randolph VT",
475B,25-Sep-12,"06D26AD-Hanover NH",,5-Nov-12
151A3,7-Mar-12,"06388B2-Lebanon NH",,16-Nov-12
CA62,3-Jan-12,,,
D31B,18-Dec-11,"06405B2-Lebanon NH",,9-Jan-12
20F5,8-Jul-12,"0669C50-Randolph VT",,3-Feb-12
C6DC,19-Dec-11,"0649597-White River VT","0649597-White River VT",9-Apr-12
14E48,1-Aug-12,"06D3206-Hanover NH",,
177F8,20-Aug-12,"063B208-Randolph VT","063B208-Randolph VT",5-May-12
553E,11-Oct-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",8-Mar-12
12D5F,18-Jul-12,"0649597-White River VT","0649597-White River VT",2-Nov-12
C6DC,13-Apr-12,"06388B2-Lebanon NH",,
11795,27-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",19-Jun-12
17B43,11-Aug-12,,,22-Oct-12
16C99,11-Aug-12,"06D3206-Hanover NH",,19-Jun-12
我可以使用以下代码获取访问过某个综合体的人员列表:

import numpy as np
a = np.recfromcsv('test.csv')
print a[a['first_visit_date'] != '']
这就是我面临的问题。我似乎找不到打印名为
trainer
的条件列的方法。如果不是空的,我想知道如何输出
'trainer\u operator'
,否则我想输出
'trainer\u management'
。我想我需要使用
numpy.lib.recfunctions.rec\u append\u字段来创建列。我只是不知道如何填充它

我还应该说,我刚刚开始发现numpy的力量,所以我尝试将它用于很多事情。这可能不是使用它的正确情况。如果有更好的方法来处理数据,也请让我知道


提前谢谢

一种简单的方法是使用:

如果您有一组更复杂的需求,只需在
a
上使用布尔运算来表示它们,并将结果传递到
fvd\u exists
的位置

然后,您可以使用
fromarrays
创建一个新的记录数组。以下是完整的exmaple:

>>> a = np.recfromcsv('test.csv')
>>> b = a[a['first_visit_date'] != '']
>>> has_op = b['trainer_operator'] != ''
>>> trainer_col = np.where(name, b.trainer_operator, b.trainer_managing)
>>> np.rec.fromarrays([b.id, b.enrollment_date, trainer_col],
...                   names=['id', 'enrollment_date', 'trainer'])
rec.array([('1536D', '12-Feb-12', '"06DA1B3-Lebanon NH"'),
       ('F15D', '18-May-12', '"06405B2-Lebanon NH"'),
       ('8096', '8-Aug-12', '"0643D38-Hanover NH"'),
       ('A036', '1-Apr-12', '"06CB8CF-Hanover NH"'),
       ('8944', '19-Feb-12', '"06D26AD-Hanover NH"'),
       ('1004E', '8-Jun-12', '"06388B2-Lebanon NH"'),
       ('16D87', '3-Jul-12', '"0649597-White River VT"'),
       ('30D7', '11-Nov-12', '"06D95A3-Hanover NH"'),
       ('3AE2', '21-Feb-12', '"06405B2-Lebanon NH"'),
       ('B0FE', '17-Feb-12', '"06D1B9D-Hartland VT"'),
       ('127A1', '11-Dec-11', '"064456E-Hanover NH"'),
       ('161FF', '20-Feb-12', '"0643D38-Hanover NH"'),
       ('475B', '25-Sep-12', '"06D26AD-Hanover NH"'),
       ('151A3', '7-Mar-12', '"06388B2-Lebanon NH"'),
       ('D31B', '18-Dec-11', '"06405B2-Lebanon NH"'),
       ('20F5', '8-Jul-12', '"0669C50-Randolph VT"'),
       ('C6DC', '19-Dec-11', '"0649597-White River VT"'),
       ('177F8', '20-Aug-12', '"063B208-Randolph VT"'),
       ('553E', '11-Oct-12', '"06D95A3-Hanover NH"'),
       ('12D5F', '18-Jul-12', '"0649597-White River VT"'),
       ('11795', '27-Feb-12', '"0643D38-Hanover NH"'),
       ('17B43', '11-Aug-12', ''),
       ('16C99', '11-Aug-12', '"06D3206-Hanover NH"')], 
      dtype=[('id', '|S5'), ('enrollment_date', '|S9'), ('trainer', '|S24')])

一种简单的方法是使用:

如果您有一组更复杂的需求,只需在
a
上使用布尔运算来表示它们,并将结果传递到
fvd\u exists
的位置

然后,您可以使用
fromarrays
创建一个新的记录数组。以下是完整的exmaple:

>>> a = np.recfromcsv('test.csv')
>>> b = a[a['first_visit_date'] != '']
>>> has_op = b['trainer_operator'] != ''
>>> trainer_col = np.where(name, b.trainer_operator, b.trainer_managing)
>>> np.rec.fromarrays([b.id, b.enrollment_date, trainer_col],
...                   names=['id', 'enrollment_date', 'trainer'])
rec.array([('1536D', '12-Feb-12', '"06DA1B3-Lebanon NH"'),
       ('F15D', '18-May-12', '"06405B2-Lebanon NH"'),
       ('8096', '8-Aug-12', '"0643D38-Hanover NH"'),
       ('A036', '1-Apr-12', '"06CB8CF-Hanover NH"'),
       ('8944', '19-Feb-12', '"06D26AD-Hanover NH"'),
       ('1004E', '8-Jun-12', '"06388B2-Lebanon NH"'),
       ('16D87', '3-Jul-12', '"0649597-White River VT"'),
       ('30D7', '11-Nov-12', '"06D95A3-Hanover NH"'),
       ('3AE2', '21-Feb-12', '"06405B2-Lebanon NH"'),
       ('B0FE', '17-Feb-12', '"06D1B9D-Hartland VT"'),
       ('127A1', '11-Dec-11', '"064456E-Hanover NH"'),
       ('161FF', '20-Feb-12', '"0643D38-Hanover NH"'),
       ('475B', '25-Sep-12', '"06D26AD-Hanover NH"'),
       ('151A3', '7-Mar-12', '"06388B2-Lebanon NH"'),
       ('D31B', '18-Dec-11', '"06405B2-Lebanon NH"'),
       ('20F5', '8-Jul-12', '"0669C50-Randolph VT"'),
       ('C6DC', '19-Dec-11', '"0649597-White River VT"'),
       ('177F8', '20-Aug-12', '"063B208-Randolph VT"'),
       ('553E', '11-Oct-12', '"06D95A3-Hanover NH"'),
       ('12D5F', '18-Jul-12', '"0649597-White River VT"'),
       ('11795', '27-Feb-12', '"0643D38-Hanover NH"'),
       ('17B43', '11-Aug-12', ''),
       ('16C99', '11-Aug-12', '"06D3206-Hanover NH"')], 
      dtype=[('id', '|S5'), ('enrollment_date', '|S9'), ('trainer', '|S24')])

我觉得这是正确的方向。这就是我挂断电话的地方。我认为这是正确的方向。非常感谢你的帮助。如果我通过执行类似于
b=a[a['first\u visit\u date']!=''和
name=b['trainer\u operator']!=''的操作来减少我的设置,我该如何做这样的事情
np。在哪里(姓名,b['id',注册日期,培训师管理',b['id',注册日期,培训师操作员])
?我最终切换到了熊猫。我可以使用类似于
a['TRAINER']=np.where(name,a['TRAINER\u OPERATOR',a['TRAINER\u management'])的语句来创建和填充新字段。然后我使用了
a[pandas.isnull(a['FIRST\u VISIT\u DATE'])
获取我所需的结果集。谢谢你的帮助!@BigShumany,很抱歉延迟响应——我没有把笔记本电脑放在面前进行测试,我也不想提出一些不起作用的建议。我发布了一个纯numpy解决方案,但听起来熊猫为你的特殊需求提供了更好的解决方案。谢谢ch.我使用的是熊猫和numpy的混合解决方案,效果很好。我觉得这是正确的方法。这是我挂断电话的地方。我认为这是正确的方法。非常感谢你的帮助。如果我通过做
b=a[a['first\u Visite\u date']!=''和
name=b['trainer\u operator']这样的事情来减少我的设置的话!=''
,我该如何做这样的事
np.where(姓名,b['id','注册日期','培训师管理'],b['id','注册日期','培训师管理')
?我最后换成了熊猫。我可以用
a['trainer']=np.where(姓名,a['trainer\u operator',a['trainer\u管理'])这样的语句
创建并填充新字段。然后我使用了
a[pandas.isnull(a['FIRST\u VISIT\u DATE'])
获取我所需的结果集。谢谢你的帮助!@BigShumany,很抱歉延迟响应——我没有把笔记本电脑放在面前进行测试,我也不想提出一些不起作用的建议。我发布了一个纯numpy解决方案,但听起来熊猫为你的特殊需求提供了更好的解决方案。谢谢我使用了熊猫和numpy的混合解决方案,效果很好。