对象以dictionary使用get()python pandas



我的csv中有一列的类型是"object",但它应该是dict系列(哪行的dict(,这一列有一些问题。

重点是将哪一行作为dict,在键上使用get('id'(来返回'Conta'列中哪一行的id值。

这就是它作为"对象"列的方式:

| Conta                                        |
| ---------------------------------------------|
| {'name':'joe','id':'4347176000574713087'}    |
| {'name':'mary','id':'4347176000115055151'}   |
| {'name':'fred','id':'4347176000574610147'}   |
| {'name':'Marcos','id':'4347176000555566806'} |
| {'name':'marcos','id':'4347176000536834310'} |

最终应该是这样的

| Conta               |
| ------------------- |
| 4347176000574713087 |
| 4347176000115055151 |
| 4347176000574610147 |
| 4347176000555566806 |
| 4347176000536834310 |

我尝试使用:

import pandas as pd
df = pd.read_csv('csv/Modulo_CS.csv')
df['Conta'] = df['Conta'].to_dict()
df['Conta'] = [x.get('id', 0) for x in df['Conta']]
#return: AttributeError: 'str' object has no attribute 'get'

我也尝试过使用ast.literal_eval((,但它不能很好地使用

import ast
import pandas as pd
df = pd.read_csv('csv/Modulo_CS.csv')
df = df[['Conta','ID_CS']]
df['Conta'] = df['Conta'].apply(ast.literal_eval)
#return: ValueError: malformed node or string: nan

有人能帮我吗?

考虑替换以下行:

df['Conta'] = df['Conta'].apply(ast.literal_eval)

如果它被正确地检测为字典,那么:

df['Conta'] = df['Conta].map(lambda x: x['id'])

如果每一行都是一个字符串:

df['Conta'] = df['Conta'].map(lambda x: ast.literal_eval(x)['id'])

但是,如果您得到一个格式错误的节点或json错误。考虑先使用str,然后使用ast.literal_eval():

df['Conta'] = df['Conta'].map(lambda x: ast.literal_eval(str(x))['id'])

相关内容

  • 没有找到相关文章

最新更新