测向替换不替换]

2024-04-20 11:54:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,我正试图从中删除[]。看起来是这样的:

dftest = pd.DataFrame({'col1': ['A', 'B'],
         'col2': ['[1, 5, 30]', '[1, 10, 20]']})

我可以使用以下方法移除[

dftest = dftest.replace({'\[':''}, regex = True)

但是,当我对]尝试相同的操作时,没有一个被删除:

dftest = dftest.replace({'\]':''}, regex = True)

如何删除最后的]?为什么它的工作原理与[不同?期望输出:

dftest = pd.DataFrame({'col1': ['A', 'B'],
         'col2': ['1, 5, 30', '1, 10, 20']})

在Jupyter实验室的一个新单元中运行这个精确的东西会返回一个没有变化的数据帧:

dftest = pd.DataFrame({'col1': ['A', 'B'],
         'col2': ['[1, 5, 30]', '[1, 10, 20]']})
dftest = dftest.replace({'\]':''}, regex = True)

但是,运行这个会取代[

dftest = pd.DataFrame({'col1': ['A', 'B'],
         'col2': ['[1, 5, 30]', '[1, 10, 20]']})
dftest = dftest.replace({'\]':''}, regex = True)

也许是我的Jupyter实验室有问题??下面是这两个代码段的截图及其输出,以防有所帮助(我想,为了证明我的笔记本上发生了一些奇怪的事情):

enter image description here


Tags: 数据方法truedataframejupyter实验室replaceregex
1条回答
网友
1楼 · 发布于 2024-04-20 11:54:06

还有另一种解决方案,使用literal_eval库中的ast

代码:

import pandas as pd
from ast import literal_eval

dftest = pd.DataFrame({'col1': ['A', 'B'],
                       'col2': ['[1, 5, 30]', '[1, 10, 20]']})
print(dftest)
# print(dftest.col2.dtype)
D = dftest.at[0, 'col2']
print(type(D))  # taking particular cell
dftest['col2'] = dftest['col2'].apply(literal_eval)
D = dftest.at[0, 'col2']  # taking particular cell
print(type(D))

输出:

  col1         col2
0    A   [1, 5, 30]
1    B  [1, 10, 20]
<class 'str'>
<class 'list'>

例如:

from ast import literal_eval
print(literal_eval('[1, 5, 30]'))
print(type('[1, 5, 30]'))
print(type(literal_eval('[1, 5, 30]')))

输出:

[1, 5, 30]
<class 'str'>
<class 'list'>

相关问题 更多 >