Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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中的正则表达式数组输出中提取非空值_Python_Arrays_Numpy_Pandas_Dataframe - Fatal编程技术网

从python中的正则表达式数组输出中提取非空值

从python中的正则表达式数组输出中提取非空值,python,arrays,numpy,pandas,dataframe,Python,Arrays,Numpy,Pandas,Dataframe,我有一个numpy.ndarray类型的列,它看起来像: col ['','','5',''] ['','8'] ['6','',''] ['7'] [] ['5'] 我想要这样的输出: col 5 8 6 7 0 5 我怎样才能在python中做到这一点。非常感谢您的帮助 要将数据转换为数

我有一个numpy.ndarray类型的列,它看起来像:

         col
    ['','','5','']
    ['','8']
    ['6','','']
    ['7']
    []
    ['5']
我想要这样的输出:

         col
          5
          8
          6
          7
          0
          5

我怎样才能在python中做到这一点。非常感谢您的帮助

要将数据转换为数值,可以使用:

import numpy as np
import pandas as pd
data = list(map(np.array, [ ['','','5',''], ['','8'], ['6','',''], ['7'], [], ['5']]))
df = pd.DataFrame({'col': data})
df['col'] = pd.to_numeric(df['col'].str.join('')).fillna(0).astype(int)
print(df)
屈服

   col
0    5
1    8
2    6
3    7
4    0
5    5
   col
0    6   # <-- note  ['','','5','6'] was converted to 6
1    8
2    6
3    7
4    0
5    5

要将数据转换为字符串,请使用:

df['col'] = df['col'].str.join('').replace('', '0')
结果看起来相同,但列的数据类型是
object
,因为值是字符串


如果某些行中有多个数字,并且您希望选择最大的, 然后,您必须循环遍历每行中的每个项,将每个字符串转换为 一个数值,取最大值:

import numpy as np
import pandas as pd
data = list(map(np.array, [ ['','','5','6'], ['','8'], ['6','',''], ['7'], [], ['5']]))
df = pd.DataFrame({'col': data})
df['col'] = [max([int(xi) if xi else 0 for xi in x] or [0]) for x in df['col']]
print(df)
屈服

   col
0    5
1    8
2    6
3    7
4    0
5    5
   col
0    6   # <-- note  ['','','5','6'] was converted to 6
1    8
2    6
3    7
4    0
5    5

我给你留下这个:

>>> l=['', '5', '', '']
>>> l = [x for x in l if not len(x) == 0]
>>> l
>>> ['5']
您可以使用lambda和filter执行相同的操作

>>> l
['', '1', '']
>>> l = filter(lambda x: not len(x)==0, l)
>>> l
['1']
下一步是遍历数组的行并实现这两个想法中的一个

有人在这里展示了如何做到这一点:


编辑:也许这是否决票,但我这样做的目的是不给最后的代码

那么
['']
['5',6']
呢?在我的情况下,我只有一个非空条目。但在这种情况下,是否有可能从列表中获得最大值。在这种情况下,['5','6']应该给我6。谢谢你为什么需要
data=list(map(np.array,
)呢?它可以是
data=np.array(…)
我得到了“AttributeError:'module'object没有属性'to_numeric'”。如何绕过它。Thanks@JoeR:如果将
data
定义为NumPy对象数组,则
df=pd.DataFrame(数据)
将生成值列表,而不是NumPy数组。由于OP中提到“NumPy.ndarray类型的列”,我尝试遵守此规范(以防万一,尽管我认为它不会有什么不同。)@user4349490:
pd.to\u numeric
是pandas的最新添加。在早期版本中有a。如果您可以更新pandas的版本,我建议您这样做。否则,请尝试
df.convert\u对象(convert\u numeric=True)
。是的,这似乎没有什么区别。顺便说一句,谢谢你的回答。还有你个人资料页面上的笑话。OP想要输出中的整数,你有字符串。
     xn = array([['', '', '5', ''], ['', '8'], ['6', '', ''], ['7'], [], ['5']],
    dtype=object)

        In [20]: for a in x:
   ....:     if len(a)==0:
   ....:         print 0
   ....:     else:
   ....:         for b in a:
   ....:             if b:
   ....:                 print b
   ....:
5
8
6
7
0
5