我的csv
文件中有一列,其值如下:
['Type: CARDINAL, Value: 50p', 'Type: CARDINAL, Value: 10', 'Type: CARDINAL, Value: 10']
问题是,当我将数据加载到数据帧中时,我得到的是string
而不是数组,因此无法遍历它。
我也尝试过json.loads()
,但是问题有时是我有类似["Type: TIME, Value: last night's"]
的值,所以我无法用single quotes (')
代替double quotes (")
,这使json无法解析我的字符串。
有什么主意如何将我的列读取为数组?
答案 0 :(得分:2)
使用ast.literal_eval
将列表的字符串表示形式转换为lists
:
import ast
a = "['Type: CARDINAL, Value: 50p', 'Type: CARDINAL, Value: 10', 'Type: CARDINAL, Value: 10']"
df = pd.DataFrame({'col':[a, a]})
df['col'] = df['col'].apply(ast.literal_eval)
print (df)
col
0 [Type: CARDINAL, Value: 50p, Type: CARDINAL, V...
1 [Type: CARDINAL, Value: 50p, Type: CARDINAL, V...
print (type(df.loc[0, 'col']))
<class 'list'>
编辑:
如果需要查找所有无法转换的值:
a = "['Type: CARDINAL, Value: 50p', 'Type: CARDINAL, Value: 10', 'Type: CARDINAL, Value: 10']"
df = pd.DataFrame({'col':[a, a, 'wrong "']})
def test(x):
try:
return ast.literal_eval(x)
except:
return np.nan
df['new'] = df['col'].apply(test)
print (df)
col \
0 ['Type: CARDINAL, Value: 50p', 'Type: CARDINAL...
1 ['Type: CARDINAL, Value: 50p', 'Type: CARDINAL...
2 wrong "
new
0 [Type: CARDINAL, Value: 50p, Type: CARDINAL, V...
1 [Type: CARDINAL, Value: 50p, Type: CARDINAL, V...
2 NaN
print (df[df['new'].isna()])
col new
2 wrong " NaN