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