将数组作为pandas的一列中的字符串拆分为多个列



我有如下格式的数据帧。描述为字符串格式。

tbody> <<tr>y
文件 描述
x[[数组(["麻省理工学院","麻省理工学院","麻省理工学院","麻省理工学院","麻省理工学院"),dtype =对象),数组((0.71641791,0.71641791,0.71641791,0.69565217,0.69565217])]]
[[阵列(["apsl - 1.0","apsl - 1.0","apsl - 1.0","apsl - 1.0","apsl - 1.0 '], dtype =对象),数组([0.28552457,0.28552457,0.28552457,0.28552457,0.28552457])]]

更新,如果列中的元素为字符串格式,则可以找到具有regex公式的数组。(注意不要使用eval,为什么要避免使用exec()和eval()呢?)

import ast
new_cols = lambda x: pd.Series({'licence':ast.literal_eval(x[0]), 
'score':ast.literal_eval(x[1])})
df = df.join(df['m'].str.findall(r'[[^[]]*]').apply(new_cols)).drop('m', axis=1)
print(df)

输出:

file    licence                                              score
0   x       ['MIT', 'MIT', 'MIT', 'MIT', 'MIT']                     [0.71641791, 0.71641791, 0.71641791, 0.6956521...
1   y       ['APSL-1.0', 'APSL-1.0', 'APSL-1.0', 'APSL-1.0', ...    [0.28552457, 0.28552457, 0.28552457, 0.2855245...

regex公式如何查找数组:(查找字符串以[开始,以]结束,但在查找字符串时不应该有[]来查找所有数组)

>>> import re
>>> re.findall(r'[[^[]]*]', "[[np.array(['MIT', 'MIT', 'MIT', 'MIT', 'MIT'], dtype=object), np.array([0.71641791, 0.71641791, 0.71641791, 0.69565217, 0.69565217])]]",)
["['MIT', 'MIT', 'MIT', 'MIT', 'MIT']",
'[0.71641791, 0.71641791, 0.71641791, 0.69565217, 0.69565217]']

,您可以创建新的列,然后与旧的dataframe连接。

new_cols = lambda x: pd.Series({'licence':x[0][0], 'score':x[0][1]})
df = df.join(df['m'].apply(new_cols)).drop('m', axis=1)
print(df)

输入:

file                                        description
0    x  [[array(['MIT', 'MIT', 'MIT', 'MIT', 'MIT'], d...
1    y  [[array(['APSL-1.0', 'APSL-1.0', 'APSL-1.0', '...

做:

import ast
df.description = (df.description.str.replace('array', '')
.str.replace(', dtype=object', '')
.apply(ast.literal_eval))
df[['license', 'score']] = [(x[0], x[1]) for x in df.description.str[0]]
df = df.drop('description', axis=1)
print(df)

输出:

file                                            license                                              score
0    x                          [MIT, MIT, MIT, MIT, MIT]  [0.71641791, 0.71641791, 0.71641791, 0.6956521...
1    y  [APSL-1.0, APSL-1.0, APSL-1.0, APSL-1.0, APSL-...  [0.28552457, 0.28552457, 0.28552457, 0.2855245...

相关内容

  • 没有找到相关文章

最新更新