csv 要使用get()python panda的字典对象

pu3pd22g  于 2022-12-06  发布在  Python
关注(0)|答案(1)|浏览(72)

我有一些问题,在我的csv中的一列的类型是一个'对象',但它应该是一个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

有人能帮帮我吗?

46scxncf

46scxncf1#

请考虑替换以下行:

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'])

相关问题