字符串的list转成list类型(str->list)
具体使用的代码
主要使用的是ast.literal_eval方法
from ast import literal_eval
a = df['带有字符串list的列'].apply(literal_eval)
使用的实例
背景:
1 在将json转为DataFrame的时候,输出的都是list,但在保存csv后就成str。
json1 = "{'a': '1', 'b': [['qq', 'ww']]}"
json2 = "{'a': '2', 'b': [['qq', 'ww'], ['aa', 'ss']]}"
json3 = "{'a': '2', 'b': [['qq', 'ww'], ['zz', 'xx']], 'c': 123}"
df = {}
i = 0
for line in [json1, json2, json3]:
d = eval(line)
df[i] = d
i += 1
df = pd.DataFrame.from_dict(df, orient='index')
print(df)
print(df['b'][0])
print(df['b'][0][0])
print(type(df['b'][0]))
df.to_csv('a.csv', index=False)
1 输出结果
# 输出结果
# print(df)
a b c
0 1 [[qq, ww]] NaN
1 2 [[qq, ww], [aa, ss]] NaN
2 2 [[qq, ww], [zz, xx]] 123.0
# print(df['b'][0])
[['qq', 'ww']]
# print(df['b'][0][0])
['qq', 'ww']
# print(type(df['b'][0]))
<class 'list'>
2 a.csv保存文件
a,b,c
1,"[['qq', 'ww']]",
2,"[['qq', 'ww'], ['aa', 'ss']]",
2,"[['qq', 'ww'], ['zz', 'xx']]",123.0
2 读取保存的a.csv查看结果
发现本来应该是list类型,结果变成了str类型。
而且在a.csv中是有“”(引号),但是读取后无法看到引号,并且依然是str类型。
df2 = pd.read_csv('a.csv')
print(df2)
print(df2['b'][0])
print(df2['b'][0][0])
print(type(df2['b'][0]))
2 输出结果
# 输出结果
# print(df)
a b c
0 1 [['qq', 'ww']] NaN
1 2 [['qq', 'ww'], ['aa', 'ss']] NaN
2 2 [['qq', 'ww'], ['zz', 'xx']] 123.0
# print(df['b'][0])
[['qq', 'ww']]
# print(df['b'][0][0])
[
# print(type(df['b'][0]))
<class 'str'>
3 解决:
使用ast.literal_eval方法
from ast import literal_eval
df2['b'] = df2['b'].apply(literal_eval)
print(df2['b'][0][0])
print(type(df2['b'][0]))
3 输出结果
# print(df2['b'][0][0])
['qq', 'ww']
# print(df2['b'][0][0])
<class 'list'>
在这里有个问题我也不是很明白,为什么to_csv后,本来是list就转成了str的类型?
如果有知道的小伙伴,可以分享学习一下!!