给定一个 csv 文件,其中某些列包含列表、集合或字典,例如 具有以下结构的一个:
| user_id| items | methods | dict_col |
|--------|-------------------------|----------------|---------------|
| ID01 | [potato, apple, potato] | {card, cash} | {F: [AB, CD]} |
| ID02 | [carrots, papaya] | {bitcoin, card}| {F: [AB, CD]} |
有没有办法以表格形式在 Python 中摄取它,并维护这些列中值的类型?
如果不是,将它们转换回列表、集合、字典的最佳方法是什么?
问题源于这样一个事实,即一旦拥有具有这种结构的 DataFrame 并将其保存到 csv 中,当使用 pandas.read_csv() 加载回 csv 时,这些列中的值不再是列表,设置或字典。
在重新创建上述场景的代码下方。
import pandas as pd
# Create dummy example
df = pd.DataFrame({'user_id': ['ID01', 'ID02'], 'items': [['potato', 'apple', 'potato'],['carrots', 'papaya']],
'methods': [{'card', 'cash'}, {'bitcoin', 'card'}],
'dict_col': [{'F': ['AB', 'CD']}, {'F': ['AB', 'CD']}]})
df[['user_id', 'items', 'methods', 'dict_col']]
type(df.iloc[0]['dict_col']) # Return a dict
df.to_csv('dummy_table.csv', index = False)
# Reload the table
df_loaded = pd.read_csv('dummy_table.csv')
"""
Line below returns a str and not a dict as in the original dataframe. How we go back to the original datatypes
(e.g. list, dict, set)in a pythonic way?
"""
type(df_loaded.iloc[0]['dict_col'])
在 Kyle J. 评论尝试使用 cvs.DictReader 后尝试
我尝试使用DictReader,但没有达到目的。但是,我不确定这是否是 Kyle 的想法。
尝试使用 DictReader
import csv
import pandas as pd
df = pd.DataFrame()
with open('dummy_table.csv', newline = '') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
df = pd.concat([df, pd.DataFrame(row, index = [0])], axis = 0)
type(df.iloc[0]['dict_col']) # Still a str
最佳答案
如果标准 csv 模块以相同的方式执行,那么您应该尝试专门解决您的问题
import ast
###your original code####
dict_value = ast.literal_eval(df_loaded.iloc[0]['dict_col'])
type(dict_value)
关于python - 在 Python 中以列表、集合、字典的形式提取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49707924/