小编use*_*627的帖子

从pandas数据帧中的多行中提取非nan值

我正在研究几个出租车数据集.我使用pandas将所有数据集连接成一个数据帧.

我的数据框看起来像这样.

                     675                       1039                #and rest 125 taxis
                     longitude     latitude    longitude    latitude
date
2008-02-02 13:31:21  116.56359  40.06489       Nan          Nan
2008-02-02 13:31:51  116.56486  40.06415       Nan          Nan
2008-02-02 13:32:21  116.56855  40.06352       116.58243    39.6313
2008-02-02 13:32:51  116.57127  40.06324       Nan          Nan
2008-02-02 13:33:21  116.57120  40.06328       116.55134    39.6313
2008-02-02 13:33:51  116.57121  40.06329       116.55126    39.6123
2008-02-02 13:34:21  Nan        Nan            116.55134    39.5123
Run Code Online (Sandbox Code Playgroud)

其中675,1039是出租车ids.基本上,共有127辆出租车有相应的纬度和经度.

我有几种方法可以为行提取非空值.

df.ix[k,df.columns[np.isnan(df.irow(0))!=1]]
              (or)
df.irow(0)[np.isnan(df.irow(0))!=1]
              (or)
df.irow(0)[np.where(df.irow(0)[df.columns].notnull())[0]]
Run Code Online (Sandbox Code Playgroud)

任何上述命令都会返回,

675   longitude    116.56359
      latitude     40.064890 
4549  longitude    116.34642
      latitude      39.96662
Name: 2008-02-02 13:31:21
Run Code Online (Sandbox Code Playgroud)

现在我想从前几行(比如从第1行到第6行)中提取所有notnull值.

我怎么做?

我可以把它循环起来.但我想要一种非循环的方式.

任何帮助,欢迎提出建议.谢谢你!:)

python numpy dataframe python-2.7 pandas

5
推荐指数
1
解决办法
2万
查看次数

切片存在于numpy数组中的元组中的列

我已将文本文件导入到numpy数组中,如下所示.

data=np.genfromtxt(f,dtype=None,delimiter=',',names=None)
Run Code Online (Sandbox Code Playgroud)

其中f包含我的csv文件的路径

现在数据包含以下内容.

array([(534, 116.48482, 39.89821, '2008-02-03 00:00:49'),
   (650, 116.4978, 39.98097, '2008-02-03 00:00:02'),
   (675, 116.31873, 39.9374, '2008-02-03 00:00:04'),
   (715, 116.70027, 40.16545, '2008-02-03 00:00:45'),
   (2884, 116.67727, 39.88201, '2008-02-03 00:00:48'),
   (3799, 116.29838, 40.04533, '2008-02-03 00:00:37'),
   (4549, 116.48405, 39.91403, '2008-02-03 00:00:42'),
   (4819, 116.42967, 39.93963, '2008-02-03 00:00:43')],
    dtype=[('f0', '<i4'), ('f1', '<f8'), ('f2', '<f8'), ('f3', 'S19')])
Run Code Online (Sandbox Code Playgroud)

如果我现在尝试列切片,即使用提取第一列或第二列

data[:,0]
Run Code Online (Sandbox Code Playgroud)

它说"太多指数".我发现这是由于它的存储方式.所有行都存储为元组而不是列表/数组.我想过使用"最丑"的方式来执行切片而不必使用迭代.那就是将每行中的元组转换为列表并将其放回到numpy数组中.这样的事情

data=np.asarray([list(i) for i in data])
Run Code Online (Sandbox Code Playgroud)

但是对于上面的问题,我正在丢失每列的数据类型.每个元素都将存储为字符串,而不是整数或浮点数,这是在前一种情况下自动检测到的.

现在,如果我想切片列而不必使用迭代,有什么办法吗?

python tuples numpy list

3
推荐指数
1
解决办法
4097
查看次数

标签 统计

numpy ×2

python ×2

dataframe ×1

list ×1

pandas ×1

python-2.7 ×1

tuples ×1