字符串的list转成list类型(str->list)

字符串的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的类型?
如果有知道的小伙伴,可以分享学习一下!!

上一篇:利用Pandas合并多个csv文件并去重【转】


下一篇:Pandas学习笔记(一)基本操作