Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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_Pandas_Dataframe - Fatal编程技术网

Python 有效地将具有混合文本值和无的列转换为整数列表

Python 有效地将具有混合文本值和无的列转换为整数列表,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个列,列中有值 data=pd.DataFrame(['1,2,3'],['4,5,6'],[None]]) 我希望输出为: [[1,2,3]]、[[4,5,6]]、[None]] 换句话说,将逗号分隔的字符串拆分为列表,同时忽略None值 此功能适用于应用: def parse_text_vector(s): if s is None: return None else: return map(int, s.split(',')) 如

假设我有一个列,列中有值

data=pd.DataFrame(['1,2,3'],['4,5,6'],[None]])

我希望输出为:

[[1,2,3]]、[[4,5,6]]、[None]]

换句话说,将逗号分隔的字符串拆分为列表,同时忽略None值

此功能适用于
应用

def parse_text_vector(s):
    if s is None:
        return None
    else:
        return map(int, s.split(','))
如本例所示:

df = pd.DataFrame([['1,2,3'], ['4,5,6'], [None]])
result = df[0].apply(parse_text_vector)
但在数百万行中,这变得相当缓慢。我希望通过按照

解析文本向量(df.values)
,但这会导致:

In [61]: parse_text_vector(df.values)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-61-527d5f9f2b84> in <module>()
----> 1 parse_text_vector(df.values)

<ipython-input-49-09dcd8f24ab3> in parse_text_vector(s)
      4         return None
      5     else:
----> 6         return map(int, s.split(','))

AttributeError: 'numpy.ndarray' object has no attribute 'split'
[61]中的
:解析文本向量(df.values)
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
---->1解析文本向量(df.值)
在解析文本向量中
4不返回
5其他:
---->6返回映射(int,s.split(','))
AttributeError:'numpy.ndarray'对象没有属性'split'

我怎样才能让它工作?或者对此进行优化,以使处理百万行数据帧不需要几十分钟?

使用
df.str.split
然后转换为列表:

In [9]: df
Out[9]: 
    Col1
0  1,2,3
1  4,5,6
2   None

In [10]: df.Col1.str.split(',').tolist()
Out[10]: [['1', '2', '3'], ['4', '5', '6'], None]
要将内部列表元素转换为整数,可以在列表中使用
map
进行转换:

In [22]: [list(map(int, x)) if isinstance(x, list) else x for x in df.Col1.str.split(',').tolist()]
Out[22]: [[1, 2, 3], [4, 5, 6], None]