字符串的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的类型?
答:python 内存可以存 list,但csv 里可有list这个类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值