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]