我有一个数据框,我正在尝试从中删除[
和]
。看起来像这样:
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 Lab的新单元格中运行此确切的操作将返回没有更改的数据框:
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实验室有问题??这是这两个代码段的屏幕截图,并带有它们的输出,以防万一(我想我的笔记本上正在发生奇怪的事情):
答案 0 :(得分:0)
还有另一种解决方案,请使用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'>