从存储为熊猫数据框中的字符串的列表中提取项目

Posted

技术标签:

【中文标题】从存储为熊猫数据框中的字符串的列表中提取项目【英文标题】:Extracting item from a list stored as string in pandas dataframe 【发布时间】:2020-11-07 03:21:57 【问题描述】:

我有以下熊猫数据框

data = ['a': 1, 'b': '[2,3,4,5,6' , 'a': 10, 'b': '[54,3,40,5'] 
test = pd.DataFrame(data) 
display(test)

    a     b
0   1   [2,3,4,5,6
1   10  [54,3,40,5

我想在 b 列中列出数字,但由于列表只有 [ 开头,不允许我创建列表,我正在尝试删除“[”,以便提取数字,但我不断收到错误,我做错了什么?

这就是数字的存储方式

test.iloc[1,1]

'[54,3,40,5'

这就是我试图删除“[”的原因。

test.iloc[0,1].replace("[",'', regex=True).to_list()

test.iloc[0,1].str.replace("[\]\[]", "")

我想要实现的是将 b 作为适当的列表,以便我可以应用其他功能。

    a     b
0   1   [2,3,4,5,6]
1   10  [54,3,40,5]

【问题讨论】:

您什么时候收到错误,在替换字符或转换为列表时? 您不能直接使用 to_list() 将字符串转换为列表 试试这个,pd.eval(test['b'] + "]")test.b.str.replace(r"[", "").str.split(",") 你可以试试这个test['b'] = test['b'].str.findall(r'\d+') 【参考方案1】:

要使您的'b' 列成为列表,您可以先删除开头的方括号,然后对'b' 列的每个元素使用split 方法

test['b'] = test['b'].str.replace('[', '').map(lambda x: x.split(','))

test
#     a            b
# 0   1  [2, 3, 4, 5, 6]
# 1  10  [54, 3, 40, 5]

【讨论】:

【参考方案2】:

试试看:

def func(col):
  return eval(col+']')

test['b'] = test['b'].apply(func)

【讨论】:

如果您解释了您提供的代码如何回答问题,这将是一个更好的答案。 我在字符串中添加 ']' 并调用函数 eval() 将字符串转换为对象【参考方案3】:
import pandas as pd
data = ['a': 1, 'b': '[2,3,4,5,6' , 'a': 10, 'b': '[54,3,40,5'] 
test = pd.DataFrame(data) 
print(test['b'][0][1:])
for i in range(len(test['b'])):
    test['b'][i] = test['b'][i][1:]

【讨论】:

以上是关于从存储为熊猫数据框中的字符串的列表中提取项目的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式从熊猫数据框中的一行中的字符串中提取所有特定值?

从熊猫数据框中仅提取数字和字符串

如何从熊猫数据框中的列中删除字符串值

如何从字典列表中提取数据到熊猫数据框中?

如何从熊猫中的字符串中提取前8个字符

熊猫数据框列上的子字符串